Sind PostgreSQL-Funktionen transaktional?

Ist eine PostgreSQL-Funktion wie die folgende automatisch transaktional?

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;


Mit anderen Worten, wenn während der Ausführung der Funktion ein Fehler auftritt, werden Änderungen vorgenommenrollte zurück? Wenn dies nicht das Standardverhalten ist, wie kann ich die Funktion vornehmenTransaktion?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage