Niveau d'isolation en lecture non libre

Read Committed est le niveau d'isolation par défaut dans Postgres. Quand une transaction est lancée sur ce niveau d'isolation, une requête ne voit seulement que les données validées avant que la requête soit lancée et ne voit jamais les changements des dirty data ou des transactions concurrentes validées pendant l'exécution de la requête.

Si une ligne retournée par une requête tandis que l'exécution d'une commande UPDATE (ou DELETE ou SELECT FOR UPDATE) est en cours de mise à jour par une transaction concurrente non libre alors la seconde transaction qui effectue le tri pour la mise à jour de la ligne attendra une autre transaction à engager ou un rollback. Dans le cas de rollback, la transaction en attente peut procéder au changement de ligne. Dans le cas de validation (et si la ligne existe toujours; i.e. si elle n'a pas été supprimée par l'autre transaction), la requête sera re-exécutée pour cette ligne en vérifiant que la nouvelle version de la ligne satisfasse la condition de recherche de la requête. Si la nouvelle version de la ligne satisfait la condition de recherche de la requête la ligne sera mise à jour (ou supprimée ou marquée pour la mise à jour).

Notez que les résultats de l'exécution des commandes SELECT ou INSERT (avec une requête) ne seront pas affectés par les transactions concurrentes.