http://www.postgresql.org/docs/9.2/static/transaction-iso.html
El modo de lectura repetible proporciona una garantía rigurosa de que cada transacción ve una vista completamente estable de la base de datos. Sin embargo, esta vista no siempre será coherente con alguna ejecución en serie (una a la vez) de transacciones concurrentes del mismo nivel. Por ejemplo, incluso una transacción de solo lectura en este nivel puede ver un registro de control actualizado para mostrar que se ha completado un lote, pero no ver uno de los registros detallados que es lógicamente parte del lote porque lee una revisión anterior del registro de control . No es probable que los intentos de imponer reglas comerciales mediante transacciones que se ejecutan en este nivel de aislamiento funcionen correctamente sin el uso cuidadoso de bloqueos explícitos para bloquear transacciones conflictivas.
¿No es una lectura fantasma, que no es posible en modo de lectura repetible?
La documentación dice que una consulta en una transacción de lectura repetible ve una instantánea al comienzo de la transacción, entonces, ¿cómo podría ser posible que una consulta lea datos inconsistentes?
fuente
Las lecturas fantasmas (asegúrese de no confundir esto con lecturas no repetibles) son posibles en el nivel de aislamiento "Lectura repetible" ... en principio. Pero el comportamiento de facto de Postgresql cuando selecciona "Lectura repetible" es más fuerte que el estándar (casi un aislamiento "serializable"), de modo que, de hecho, no tendrá lecturas fantasma. Documentos :
Ahora, ¿qué pasa con esa advertencia "esta opinión no siempre será coherente con alguna ejecución en serie (una a la vez) de transacciones concurrentes del mismo nivel"? Creo (no estoy seguro) que eso significa que la instantánea "desde el exterior" (fijada al comienzo de la transacción) puede eventualmente incluir filas de otras transacciones, pero no puede incluir algunas otras filas de la misma transacción.
fuente