Chequeos de consistencia de datos en el nivel de aplicación

Ya que las lecturas en Postgres no bloquean los datos, sin tener en cuenta el nivel de aislamiento de la transacción, los datos leídos por una transacción pueden ser sobreescritos por otra. En otras palabras, si una fila es devuelta por SELECT esto no significa que esta fila realmente exista en el momento en que se devolvió (un tiempo después de que la declaración o la transacción comenzaran, por ejemplo) ni que la fila esté protegida de borrados o actualizaciones por la transacción concurrente antes de que ésta se lleve a cabo o se pare.

Para asegurarse de la existencia de una fila y protegerla contra actualizaciones concurrentes, debería usar SELECT FOR UPDATE o una declaración de tipo LOCK TABLE más apropiada. Esto debe tenerse en cuenta cuando desde otros entornos se estén portando aplicaciones hacia Postgres utilizando el modo serializable.

Nota

Antes de la versión 6.5 Postgres usaba bloqueos de lectura, así que la consideración anterior es también válida cuando actualice a 6.5 (o superior) desde versiones anteriores de Postgres.