[Pgsql-ayuda] Duda con funciones y Transacciones

Alvaro Herrera alvherre@dcc.uchile.cl
Sat, 29 Nov 2003 16:51:49 -0300


On Sat, Nov 29, 2003 at 12:07:24PM -0600, Victor Chavez wrote:

Víctor,

> A mi entender, la funcion es una transaccion en si
> misma, pero solo quisiera si alguien con mas
> experiencia pudiera explicarme si existe en esto el
> concepto de que si la funcion termina se hizo todo el
> proceso y si algo falla la funcion no hizo nada.

No, la función no es una transacción en sí misma.  La función es parte
de la transacción que la encierra.  Si esa transacción es abortada por
cualquier motivo, incluyendo fallas al interior de la función, todas las
acciones de la transacción (incluyendo la función) quedan sin efecto.

Esto excluye, naturalmente, los efectos que haya podido tener la función
fuera de la base de datos (por ej. si mandaste señales a otra aplicación
o escribiste a disco).  Sospecho que si quieres hacer eso de manera
robusta, es mejor que uses LISTEN/NOTIFY.


En una versión futura de Postgres se espera tener soporte a
transacciones anidadas, es decir, la capacidad de agrupar subconjuntos
de una transacción de manera de poder abortarlos selectivamente.
Naturalmente, la transacción más externa seguirá siendo una unidad de
acción atómica.

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
Officer Krupke, what are we to do?
Gee, officer Krupke, Krup you! (West Side Story, "Gee, Officer Krupke")