¿Es una función PostgreSQL tal como la siguiente automáticamente transaccional?¿Las funciones de PostgreSQL son transaccionales?
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, serán los cambios ser revertido? Si este no es el comportamiento predeterminado, ¿cómo puedo hacer que la función transaccional?
¿Por qué no prueba esto usted mismo? Simplemente haz un ROLLBACK y sabes cuál es la respuesta. Debe ser "sí". –
@FrankHeikens mi pregunta es "¿los cambios se retrotraerán automáticamente después de un error", en lugar de "se revertirán los cambios si ejecuto ROLLBACK" –
@Don Tenga en cuenta que 'TRUNCATE' tiene, o solía tener, algunos comportamiento transaccional algo funky. No recuerdo los detalles; buscar en los archivos pgsql-general. –