[Pgsql-ayuda] Duda con funciones y Transacciones

Manuel Rabade mig@mig-29.net
Sat, 29 Nov 2003 14:13:36 -0600


On Sat, Nov 29, 2003 at 12:07:24PM -0600, Victor Chavez wrote:
> Hola a todos.
> 
> Hace poco empece a desarrollar un sistema teniendo
> como base de datos a PostgreSQL. La funciones de la
> base de datos las estoy haciendo en Pl/PgSql. Todo
> esta muy bien, la base de datos se ha comportado de
> manera rapida y eficiente. La duda que tengo es que en
> una parte de la documentacion de Pl/pgsql dice que las
> funciones no soportan transacciones; si tengo un
> conjunto de instrucciones en una funcion que afectan a
> varias tablas y por alguna razon ya sea de software o
> hardware el proceso se aborta... que ocurre? Por
> definicion una transaccion BEGIN... COMMIT, se hace
> todo el conjunto o no se hace.  Que pasa con unae
> funcion si por alguna razon no se llega al final de
> todas sus instrucciones?
> 
> Esto es lo que dice la documentacion:
> 
>  It is important not to confuse the use of BEGIN/END
> for grouping statements in PL/pgSQL with the database
> commands for transaction control. PL/pgSQL's BEGIN/END
> are only for grouping; they do not start or end a
> transaction. Functions and trigger procedures are
> always executed within a transaction established by an
> outer query --- they cannot start or commit
> transactions, since PostgreSQL does not have nested
> transactions.
> 
> La parte que dice que las funciones y los triggers son
> ejecutados dentro de una transaccion establecida por
> un  a consulta externa... que implica?

En conjunto lo que la documentacion quiere decir es que Postgres no soporta
transacciones anidadas, es decir, no puedes iniciar una transaccion y dentro
de esta transaccion iniciar otra, por eso dentro de los triggers y funciones no
puedes iniciar una transaccion, se supone que debes iniciarla desde el cliente
de postgres, y asi lo que se invoque durante esa transaccion es controlado (tanto
instrucciones sql, funciones, triggers, etc).

Saludos.