From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Romulo <rubenvive(at)gmail(dot)com> |
Cc: | Ayuda Postgres <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Sobre Transacciones |
Date: | 2005-12-18 13:00:31 |
Message-ID: | 20051218130031.GA30322@surnet.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Romulo escribió:
> Si desde una aplicación cliente usando un NetProvider, por ejemplo, invoco
> un procedimiento almacenado, con varias sentencias en su interior, y si la
> última de ellas genera un error, las que primero se ejecutaron sin problema
> quedan definitivamente en la base de datos?, o todo el procedimiento
> almacenado es revertido, porque a fin de cuentas desde la aplicación cliente
> es un solo comando?
Postgres ejecuta todo dentro de una transaccion, ya sea que se lo
indiques explicitamente usando BEGIN/COMMIT, o bien inicia
implicitamente una transaccion al momento de ejecutar un comando. (Si
se termina de inmediato al terminar el comando, o continua hasta
encontrar un COMMIT/ROLLBACK, depende de si el cliente esta usando
autocommit. El comportamiento por omision es hacer el COMMIT
inmediatamente despues de terminada la ejecucion del comando).
Por lo tanto, el procedimiento completo se ejecuta dentro de una y solo
una transaccion. Si cualquier parte de el falla, la transaccion
completa es abortada.
> O es que debo, dentro del procedimiento colocar explícitamente un
> bloque de control transaccional con el begin, commit o rollback?
De hecho si lo trataras, verias que no te lo permite. En PL/pgSQL
puedes usar bloques de excepcion para establecer savepoints, pero si das
un COMMIT te va a lanzar un error.
--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
From | Date | Subject | |
---|---|---|---|
Next Message | Romulo | 2005-12-18 14:04:53 | Re: Sobre Transacciones |
Previous Message | Oswaldo Hernández | 2005-12-18 12:34:10 | Re: [pgsql-es-ayuda] Otra consulta sobre la lógica sql en la DB o en el código |