--------------------------------------------------
From: "Alvaro Herrera" <[EMAIL PROTECTED]>
Sent: Thursday, July 31, 2008 9:19 PM
To: "Linos" <[EMAIL PROTECTED]>
Cc: "Lista PostgreSql" <pgsql-es-ayuda@postgresql.org>
Subject: Re: [pgsql-es-ayuda] sobre savepoints
Linos escribió:
tambien podria dentro de la funcion quizas lanzar primero el select y
segun lanzar un insert o un update, no? deberia ser mas rapido que el
savepoint? lo que no se como resolver en plpsql es el tema del numero de
columnas variable pero supongo q habra alguna forma, no?
El problema es que para hacer un select para verificar si necesitas
update o insert, necesitarias bloquear la tabla de antemano; de lo
contrario puede pasar que hagas el select, diga que no esta el registro,
y justo algun otro proceso lo inserte antes que tu alcances a
insertarlo.
Si no te complica bloquear la tabla, entonces creo que este
procedimiento seria lo mas rapido. (Digo "creo" porque es posible que
la otra alternativa es hacerlo con un "upsert" usando un savepoint. Hay
un procedimiento de ejemplo de esto en la documentacion de Postgres. La
gracia del upsert es que solo tienes que hacer un recorrido de la tabla
en el caso que funcione a la primera; en cambio si bloqueas la tabla
tienes que hacer primero el select y despues el insert o update, o sea
son dos recorridos en todos los casos. Sin embargo tiene la desventaja
de tener que crear y destruir el savepoint por cada registro).
Alvaro ... el UPSERT lo veo dentro de los TODO de postgresql .... o estoy
equivocado?
Atentamente,
RAUL DUQUE
Bogotá, Colombia
--
Alvaro Herrera
http://www.PlanetPostgreSQL.org/
"After a quick R of TFM, all I can say is HOLY CR** THAT IS COOL!
PostgreSQL was
amazing when I first started using it at 7.2, and I'm continually
astounded by
learning new features and techniques made available by the continuing work
of
the development team."
Berend Tober,
http://archives.postgresql.org/pgsql-hackers/2007-08/msg01009.php
--
TIP 4: No hagas 'kill -9' a postmaster
__________ Information from ESET Smart Security, version of virus
signature database 3316 (20080731) __________
The message was checked by ESET Smart Security.
http://www.eset.com
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net