Re: [Pgsql-ayuda] ayuda :)

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)

In response to

Browse pgsql-es-ayuda by date

  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