Re: [pgsql-es-ayuda] Ayuda Manejo de transacciones en una función.

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
>

In response to

Browse ecpug by date

  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

Browse pgsql-es-ayuda by date

  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.