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?
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 |