> Ahora ¿que pasa si no encuentra una fila con codigo=1?
> Pasa esto:
> 1) Ninguna otra transacción podrá insertar una fila con codigo 1, ni tampoco
> podrá
> cambiarle a otra fila el código al valor 1
>
Si es primary key , recorda que tiene la restriccion UNIQUE por lo que
no podés repetir valores (no podrán insertar valores que ya esten en la llave)
> ó pasa esto:
>
> 2) puede insertar filas con codigo 1 y también puede cambiarle el codigo a
> otra fila para dejarselo en 1.
>
> Bueno, espero puedan ayudarme
>
Para que el Select *... for update realmente funcion debe estar en una
transaccion (BEGIN - END).
En el caso que una transacción este 'bloqueando' el codigo 1 con un 'for
update' , la otra transaccion quedará esperando hasta que se desbloquee.
Abri dos psql y probalo.
BEGIN WORK;
SELECT * .... WHERE CODIGO=1 FOR UPDATE
en la otra terminal intenta modificar
UPDATE tabla SET CODIGO=9 WHERE CODIGO=1;
Esta ultima terminal quedará en espera y cuando en la primera
tires un END WORK; se desbloqueará.
--
Emanuel Calvo Franco
ArPUG [www.arpug.com.ar] / AOSUG Member
www.emanuelcalvofranco.com.ar
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net