Re: uso transacciones en plpgsql

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Silvio Quadri <silvioq(at)gmail(dot)com>
Cc: Cesar Erices <caerices(at)gmail(dot)com>, foro postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: uso transacciones en plpgsql
Date: 2008-07-01 14:11:44
Message-ID: 20080701141144.GK18252@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Silvio Quadri escribió:

> > Eso es verdad hasta cierto punto solamente; por ejemplo, si haces
> >
> > begin;
> > select una_funcion();
> > select otra_funcion();
> > commit;
> >
> > entonces ambas funciones se invocan en una sola transaccion.
>
> Sólo por darle una definición concreta ...
> ¿podríamos decir entonces ... "Cada llamado a una función plpgsql es
> una unidad transaccional indivisible"?

Cada orden que se envía al motor se ejecuta dentro de una única
transacción. Si existía un bloque de transacción antes de invocar a la
orden (porque el usuario lo abrió enviando BEGIN), se utiliza ese. Si
no existía, se abre una transacción nueva. En este último caso, la
nueva transacción se cierra automáticamente al completarse la ejecución
de la orden.

Uso los términos "bloque de transacción" y "transacción" (como los llama
el código) para distinguir entre una que abre el usuario directamente y
una que se abre automáticamente. No hay ninguna diferencia entre uno y
otra salvo esta.

Nota que esto es así por diseño, pero no por principio, es decir, es una
limitación del código actual. Es posible que en algún futuro exista una
implementación diferente que permita control transaccional dentro de la
"función", pero si esto llega a suceder lo más probable es que se use
una sintaxis diferente para ejecutarla (por ejemplo CALL en vez de
SELECT).

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Yoel Mc Lennan 2008-07-01 15:26:44 Re: Puede pasar que en Postgres para Windows se pierdan datos si se resetea la pc?
Previous Message Silvio Quadri 2008-07-01 13:24:26 Re: uso transacciones en plpgsql