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

Responder a