Re: cambiar query insert por un update si el registro ya existe

From: "Fernando Moreno" <azazel(dot)7(at)gmail(dot)com>
To: Miguel <mmiranda(at)123(dot)com(dot)sv>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: cambiar query insert por un update si el registro ya existe
Date: 2008-04-23 18:01:36
Message-ID: b1c45530804231101t3829300dkfdf121288ba49c45@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El día 23/04/08, Miguel <mmiranda(at)123(dot)com(dot)sv> escribió:
>
> Saludos a todos, existe alguna forma de cambiar un query insert por un
> update si la fila ya existe? Algo asi como insert or update tabla values
> (xxxxx)
> Me explico
> digamos la tabla tarifa (idorigen int, iddestino int, tarifa numeric)
> y tengo el archivo cvs tarifas.csv:
> 1,1,0.10
> 1,2,0.20
> 1,3,0.10
> etc
>
> Tengo un perl script que lee el archivo y ejecuta inserts en la tabla
> usando un funcion inserta_tarifas(int,int,numeric), yo quiero usar el mismo
> archivo independientemente si es para insertar nuevas o actualizar las
> antiguas de manera que si la combinacion 1,1,0.10 ya existe y la primera
> fila que esta en el archivo es 1,1,0.20, entonces un regla (o trigger)
> deberia verificar si la fila ya existe y ejecutar un update en lugar de
> insertar otro registro y que al final en la tabla no quede
> 1,1,0.10
> 1,1,0.20
> sino que
> 1,1,0.20
>
> Si necesitan mayor detalle favor hacermelo saber
> ---
> Miguel
> --
> TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
>

Un trigger que se active en cada inserción te podría servir. Dentro evalúas
los registros y en caso de encontrar un duplicado, actualizas los datos y
retornas null para saltarte la inserción. De esa forma seguirías ejecutando
sólo inserts. Aunque tengo mis dudas, nunca he usado triggers exactamente de
esa forma y no sé si el descartar la inserción también anule los cambios
hechos con update dentro de la función.

Por cierto, creo que un caso como el que mencionas ( 1,1,0.10 y 1,1,0.20) no
debería ser posible, ¿estás usando llave primaria en esa tabla?

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Moises Alberto Lindo Gutarra 2008-04-23 18:02:31 Re: data warehouse
Previous Message Juan Carlos Barranco de Paz 2008-04-23 17:53:07 RE: data warehouse