From: | Jorge Garcia <jorgeenriqueg(at)gmail(dot)com> |
---|---|
To: | Jaime Casanova <jaime(at)2ndquadrant(dot)com> |
Cc: | ecpug(at)postgresql(dot)org, pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: [pgsql-es-ayuda] Ayuda Manejo de transacciones en una función. |
Date: | 2012-09-19 21:17:41 |
Message-ID: | CABS6n2a7pr0J3bvb9Zys4mNiGjhD4VA7XBmC1n5nmin=QHqy4g@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | ecpug pgsql-es-ayuda |
He estado intentando con el savepoint pero no lo he conseguido hacer
funcionar lo que tengo es algo así
un cursor y anidado otro cursor, dentro de las instrucciones del cursor
interno se hacen updates o inserts y quiero que esos no se han
transaccionales. Utilizo el savapoint y caputuro la exception
pero siempre se va por la excepcion y no sale nunca del cursor.
El código que tengo hace mas o menos algo así:
CREATE OR REPLACE FUNCTION calculo()
RETURNS text AS
$BODY$
DECLARE
cursor_a RECORD;
cursor_b RECORD;
BEGIN
FOR cursor_a IN SELECT a,b,c from tabla_a
LOOP
FOR cursor_b IN SELECT select d,e,r from tabla_b
LOOP
BEGIN
IF(cursor_a.a=cursor_b.d)
THEN
BEGIN
--- calculos, procesamiento y updates
SAVEPOINT my_savepoint;
-- capturo la exception pero siempre se genera y nunca sale del cursor
END;
END IF;
END LOOP;
END LOOP;
return 'Finalizado';
END;
$BODY$
LANGUAGE plpgsql VOLATILE STRICT;
ALTER FUNCTION calculo()
OWNER TO postgres;
Gracias, Nuevamente.
Att
Jorge García.
2012/9/19 Jaime Casanova <jaime(at)2ndquadrant(dot)com>
> 2012/9/19 Jorge Garcia <jorgeenriqueg(at)gmail(dot)com>:
> >
> > Tengo una función que realiza cálculos a unos 80 mil registros los
> registros
> > los recorro en un cursor y se hace calculo registro por registro y quiero
> > que no se haga commit al final de todo el procesamiento si no que se haga
> > commit por cada registro procesado y saber si se proceso o hubo algún
> error.
> > como puedo hacer eso?? de antemano gracias por la ayuda que me puedan
> dar.
> >
>
> Saludos,
>
> Estamos hablando de una función almacenada aquí? Si es así, toda la
> función ocurre dentro de la misma transacción que invoco a la función,
> si no había una transacción abierta la función abre una transacción
> automáticamente al iniciar y la cierra con COMMIT al terminar o con
> ROLLBACK si algún error ocurrió.
>
> Si no quieres que no poder procesar un registro termine todo lo
> avanzado puedes usar SAVEPOINT para atrapar el error y evitar que la
> función termine.
>
> --
> Jaime Casanova www.2ndQuadrant.com
> Professional PostgreSQL: Soporte 24x7 y capacitación
>
From | Date | Subject | |
---|---|---|---|
Next Message | Alejandro Carrillo | 2012-09-19 21:36:33 | Re: [pgsql-es-ayuda] RE: [pgsql-es-ayuda] Ayuda Manejo de transacciones en una función. |
Previous Message | Milton Labanda | 2012-09-19 21:14:32 | Re: Actualizacion PGDay Ecuador 2012 |
From | Date | Subject | |
---|---|---|---|
Next Message | Jorge Alberto Aquino Andrade | 2012-09-19 21:18:54 | Rendimiento |
Previous Message | Edwin Quijada | 2012-09-19 18:02:07 | RE: [pgsql-es-ayuda] Ayuda Manejo de transacciones en una función. |