
Juan José Vargas Fletes
PreguntaA mi me queda una duda, entonces, las funciones son de inicio a fin transaccionales? ya que usan el BEGIN?
Oswaldo Rodríguez González
Todas las FUNCTION son transaccionales, pero Postgresql tiene otro tipo de PLs. Se llaman PROCEDURE, una muy sencilla se puede crear así:
CREATE PROCEDURE tu_procedure() LANGUAGE plpgsql AS $$ DECLARE <variables> BEGIN <hacer algo> COMMIT; END $$;
Cómo ves, se parece mucho a las PL FUNCTION, pero ejecutan diferente:
CALL tu_procedure();
La diferencia fundamental en PROCEDURE es que cuando ejecutas COMMIT, todo lo que se ha ejecutado hasta el momento queda definitivo, y puedes seguir ejecutando más código o incluso hacer llamado recursivo.
En una FUNCTION normal, solo se aplican los cambios cuando llegue a END, incluso si hay recursividad.

Juan José Vargas Fletes
Wow, existe alguna forma de que no toda la función sea transaccional? Solo alguna parte en específico de la función?
Oswaldo Rodríguez González
Si, desde que BEGIN se ejecuta, todo lo que venga en adelante será esa misma transacción, hasta que ejecutes un COMMIT o un ROLLBACK . Si no ejecutas nada pasado un tiempo de inactividad, la base de datos asume un ROLLBACK
Oswaldo Rodríguez González
Si así es, BEGIN indica que inicia la transacción.