> 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

Responder a