From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Juan Garcés Bustamante <jgarces(at)futuroprofesional(dot)cl> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: [GENERAL] Transacciones Anidadas |
Date: | 2005-12-16 21:42:02 |
Message-ID: | 20051216214202.GG27602@surnet.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda pgsql-general |
Hola, incluyo una copia a la lista de tu mensaje. Por favor haz lo
mismo siempre. Te sugiero que te suscribas a la lista (puedes usar el
modo "nomail" para que no te llegue ningun mensaje de ella si asi lo
deseas).
Mi respuesta mas abajo:
Juan Garcés Bustamante escribió:
> Hola
>
> Bueno, ya sabía de los savepoints, pero el problema es que la segunda consulta
> la tengo en un función, te explico con un ejemplo:
>
> function mi_funcion_1() {
> ...sql_query("BEGIN WORK");
> ...sql_query("INSERT INTO mitabla VALUES (1)");
>
> ....mi_funcion_2(); /*aquí ejecuto las otras instrucciones sql*/
>
> ...sql_query("INSERT INTO mitabla VALUES (4)");
> ...sql_query("ROLLBACK WORK");
> }
>
> function mi_funcion_2() {
> ...sql_query("BEGIN TRANSACTION");
> ...sql_query("INSERT INTO mitabla VALUES (2)");
> ...sql_query("INSERT INTO mitabla VALUES (3)");
> ...sql_query("COMMIT TRANSACTION");
> }
>
> Mi problema es que mi_funcion_2 puede ser llamada en forma independiente a
> mi_funcion_1, con lo que el uso de savepoints no me serviría de mucho, pues no
> pueden ser usados si no están en una transacción.
Esto no funcionara jamas lamentablemente. Lo que puedes hacer es usar
una bandera para decirle a la funcion 2 si se esta ejecutando dentro de
una transaccion o no, y que use un savepoint o una transaccion
dependiendo de esto:
function mi_funcion_2(bool en_transaccion) {
if (en_transaccion)
sql_query("savepoint foo");
else
sql_query("BEGIN TRANSACTION");
...sql_query("INSERT INTO mitabla VALUES (2)");
...sql_query("INSERT INTO mitabla VALUES (3)");
if (en_transaccion)
sql_query("release foo");
else
sql_query("commit TRANSACTION");
}
--
Alvaro Herrera Developer, http://www.PostgreSQL.org
La web junta la gente porque no importa que clase de mutante sexual seas,
tienes millones de posibles parejas. Pon "buscar gente que tengan sexo con
ciervos incendiándose", y el computador dirá "especifique el tipo de ciervo"
(Jason Alexander)
From | Date | Subject | |
---|---|---|---|
Next Message | Felipe Araoz Ramos | 2005-12-16 21:54:24 | Fwd: Pasar parametros a PostgreSQL |
Previous Message | Guillermo Schulman | 2005-12-16 21:25:02 | upgrade a PG 8.1 |
From | Date | Subject | |
---|---|---|---|
Next Message | Jerry Sievers | 2005-12-16 21:42:37 | |
Previous Message | Chris Browne | 2005-12-16 21:26:48 | Re: Toolkit for creating editable grid |