Re: Problemas con grabacion

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Martín Marqués <martin(at)bugs(dot)unl(dot)edu(dot)ar>
Cc: pgsql-es-ayuda(at)postgresql(dot)org, Fernando Aguada <fernandoaguada(at)yahoo(dot)com(dot)ar>
Subject: Re: Problemas con grabacion
Date: 2005-10-10 21:36:48
Message-ID: 20051010213648.GG5848@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Martín Marqués wrote:
> El Lun 10 Oct 2005 14:36, Fernando Aguada escribió:
> > Hola a todos,
> > Tengo una aplicacion en visual foxpro que se conecta con
> > postgres 8.0.4 corriendo bajo un windows 2000 server.
> > El problema que se plantea es el siguiente, tengo una carga de facturas que
> > me graba como minimo 2 archivos,
> > el TOTAL y el LINEAS, cada vez que se inicia el proceso de una nueva
> > factura, le envio al motor un BEGIN TRANSACTION
> > el problema surge cuando una validacion en el trigger que se dispara al
> > grabar el total, detecta un error, entonces
> > con un RAISE EXCEPTION, devuelvo un mensaje de error, PERO QUE PASA, me
> > desaparecen los registros
> > del LINEAS !!!!, sin que yo le haya mandado un ROLLBACK !!!.
> > Si a alguien le paso lo mismo, le agradeceria cualquier sugerencia.
>
> Cualquier error dentro de la transacción automáticamente ejecuta un rollback
> cuando se marcar el final de la transacción. Así es como debería ser, y así
> es como funciona.

Una cosa que se puede hacer es usar SAVEPOINTs despues de haber guardado
en LINEAS, antes de que se haga la validacion en el trigger. Asi, si la
validacion falla, se puede re-ejecutar esa parte haciendo un ROLLBACK TO
al savepoint anterior.

Dentro de una funcion PL/pgSQL no se puede usar SAVEPOINT directamente;
en ese caso, lo que hay que hacer es usar clausulas EXCEPTION en el
bloque que tenga posibilidad de fallar.

--
Alvaro Herrera http://www.advogato.org/person/alvherre
You liked Linux a lot when he was just the gawky kid from down the block
mowing your lawn or shoveling the snow. But now that he wants to date
your daughter, you're not so sure he measures up. (Larry Greenemeier)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-10-10 21:38:01 Re: Variables in out
Previous Message Martín Marqués 2005-10-10 21:09:17 Re: Problema con nueva conexión.