From: | "Raul Andres Duque" <ra_duque(at)yahoo(dot)com(dot)mx> |
---|---|
To: | "Alvaro Herrera" <alvherre(at)commandprompt(dot)com> |
Cc: | "Sonia Malave" <smalave(at)hidrobolivar(dot)com(dot)ve>, <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Transacciones! |
Date: | 2007-06-26 21:27:56 |
Message-ID: | 016101c7b838$de0ecde0$5800a8c0@amadeus.net.co |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Muchas gracias Alvaro ... ahora si me quedó MUY claro el tema.
Atentamente,
RAUL DUQUE
Bogotá, Colombia
----- Original Message -----
From: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
To: "Raul Andres Duque" <ra_duque(at)yahoo(dot)com(dot)mx>
Cc: "Sonia Malave" <smalave(at)hidrobolivar(dot)com(dot)ve>;
<pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Tuesday, June 26, 2007 4:04 PM
Subject: Re: [pgsql-es-ayuda] Transacciones!
> Raul Andres Duque escribió:
>> Una pregunta relacionada:
>>
>> Ya que una función no puede manejar transaciones explicitas (cada SP se
>> considera una transacción en sí), si tengo SPs anidados (un SP llama a
>> otros), cómo se maneja el tema de transacciones, si no es posible usar
>> transacciones anidadas??
>
> Todas las funciones se ejecutan dentro de la misma transaccion. Eso de
> que "cada SP se considera una transaccion en si" es un invento; o mas
> bien una simplificacion de la realidad.
>
> La realidad es que las funciones no abren ni cierran transacciones. La
> transaccion se abre _antes_ de que la funcion se invoque, si es que no
> hay una abierta de antemano. Y si habia una transaccion abierta,
> entonces al terminar la funcion, no se hace nada. Y si no la habia,
> entonces la transaccion se cierra.
>
> Para mayor confusion, hay que agregar que esto en realidad no tiene nada
> que ver con las funciones, sino que TODAS las ordenes funcionan de la
> misma manera. Si tu envias un "SELECT * from table" sin una
> transaccion, entonces se abrira una antes de ejecutar el SELECT, y se
> cerrara despues que termine. A menos que ya haya una abierta, en cuyo
> caso no se hace nada.
>
> Entonces la regla en realidad es "toda orden que se envie al motor se
> ejecuta dentro de una transaccion". Ya sea porque el usuario la abrio
> manualmente con BEGIN o START, o bien porque el motor la abrio
> automaticamente al ver que no habia una.
>
>> Lo ideal sería que se generara una transacción SOLO por la función más
>> "externa" y si alguien quiere puede utilizar SAVEPOINTs antes de los
>> llamados a los SP "internos" ... así lo maneja postgresql?
>
> No. Casi. Se abre una transaccion para la orden mas externa (que
> puede ser una funcion o puede ser otra cosa), y no se hace nada para las
> mas internas.
>
> --
> Alvaro Herrera
> http://www.CommandPrompt.com/
> The PostgreSQL Company - Command Prompt, Inc.
From | Date | Subject | |
---|---|---|---|
Next Message | Juan Carlos Alemán Cuadros | 2007-06-26 21:41:03 | RE: Ide tipo TOAD. |
Previous Message | Mario Gonzalez | 2007-06-26 21:23:38 | Re: Instalación postgres 8.1 en Debian 4 |