> 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