Yo trabajo con postgres 8.2.
Voy a dar un ejemplo falso y tal vez sin sentido con el sólo fin de poder
plantear mi duda.
1) tengo :
table ejemplo
(
codigo PK;
....
...
)
si yo hago una transaccion(con el aislamiento por defecto) y dentro un
select * from ejemplo where codigo=1 for update
bueno este select for update impediria que otras transacciones editen la fila
con codigo 1 hasta que termine la transaccion.
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
ó 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