From: | Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl> |
---|---|
To: | Rodrigo Alvarez <correo_69(at)hotmail(dot)com> |
Cc: | pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx |
Subject: | Re: [Pgsql-ayuda] ayuda :) |
Date: | 2003-09-02 17:43:27 |
Message-ID: | 20030902174327.GI21909@dcc.uchile.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Tue, Sep 02, 2003 at 11:52:59AM -0400, Rodrigo Alvarez wrote:
> >mira si hago un insert into en una funcion a una tabla determinada, si me
> >resulta un error , por darte un ejemplo, la clave primaria ya exista..
> >como puedo recuperar ese error como para poder hacer algun manejo simple
> >de errores...
>
> [este parrafo lo escribi yo en un mail privado:]
>
> Depende del lenguaje que estes usando para conectarte a la BD,
> obviamente.
>
> el lenguaje que estoy utilizando es plpgsql
Hmmm... el problema es que si intentas insertar un valor que ya existe,
el sistema arroja un error _y_ aborta la transaccion en curso. No hay
manera de volver a un estado valido, como no sea cancelando la
transaccion en curso ("ROLLBACK") y luego intentarlo todo desde el
principio.
Este es un problema bastante recurrente y que no tiene una solucion
satisfactoria IMHO. Habia un parche con el cual se lograba disminuir la
probabilidad de una condicion de carrera ("race condition"), pero ésta
sigue existiendo :-( La idea era usar INSERT ... SELECT ... EXCEPT, no
recuerdo los detalles.
La verdadera solucion seria usar un sistema de transacciones anidadas, o
savepoints. Ojalá eso se pueda tener para 7.5!
--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"No hay ausente sin culpa ni presente sin disculpa" (Prov. frances)
From | Date | Subject | |
---|---|---|---|
Next Message | Manuel Sugawara | 2003-09-02 17:54:12 | Re: [Pgsql-ayuda] Saber si vive la BD |
Previous Message | Alvaro Herrera | 2003-09-02 17:34:33 | Re: [Pgsql-ayuda] Longitud de campos string |