Являются ли функции PostgreSQL транзакционными?
Является ли функция PostgreSQL, например, следующая автоматически транзакционной?
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;
Другими словами, если во время выполнения функции произойдет ошибка, будут ли какие-либо измененияrolled back? Если это не поведение по умолчанию, как я могу сделать функциюtransactional?