¿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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta