¿Son transaccionales las funciones de PostgreSQL?
¿Es una función de PostgreSQL como la siguiente automáticamente transaccional?
CREATE OR REPLACE FUNCTION refresh_materialized_view(name)
RETURNS integer AS
$BODY$
DECLARE
_table_name ALIAS FOR $1;
_entry materialized_views%ROWTYPE;
_result INT;
BEGIN
EXECUTE 'TRUNCATE TABLE ' || _table_name;
UPDATE materialized_views
SET last_refresh = CURRENT_TIMESTAMP
WHERE table_name = _table_name;
RETURN 1;
END
$BODY$
LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
En otras palabras, si se produce un error durante la ejecución de la función, ¿se realizarán cambios?retrotraído? Si este no es el comportamiento predeterminado, ¿cómo puedo hacer la función?transaccional?