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