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