Re: Sobre Transacciones

From: Romulo <rubenvive(at)gmail(dot)com>
To: Romulo <rubenvive(at)gmail(dot)com>, Ayuda Postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Sobre Transacciones
Date: 2005-12-18 14:04:53
Message-ID: dbb3157b0512180604y2a9125efj8a74ee99f5fe188e@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gracias por responder Alvaro.

Entonces, puedo concluir que:

Desde una aplicación cliente invoco a un procedimiento almacenado,
independientemente de cuántas acciones diferentes ejecuto dentro del
procedimiento (varios insert, otros cuantos updates, e incluso si invoco a
otros procedimientos almacenadas desde ahí), si uno de ellos falla, -en el
peor de los casos el último- todos los cambios efectuados por las primeras
sentencias que tuvieron éxito dentro del procedimiento serán revertidas?,
dejando así la base de datos en su estado original ?

Agradeceré me puedas refrendar (o corregir) el punto anterior.

Gracias de antemano.

On 12/18/05, Alvaro Herrera <alvherre(at)commandprompt(dot)com> wrote:
>
> 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
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-12-18 15:02:21 Re: Sobre Transacciones
Previous Message Alvaro Herrera 2005-12-18 13:00:31 Re: Sobre Transacciones