Niveaux d'isolation et anomalies
AvancéLe niveau d'isolation détermine ce qu'une transaction voit des changements concurrents.
| Niveau | Comportement dans PostgreSQL |
|---|---|
READ COMMITTED (défaut) | Chaque instruction voit les données validées au moment où elle démarre |
REPEATABLE READ | La transaction voit un instantané figé au premier accès ; pas de lecture non répétable ni de fantômes |
SERIALIZABLE | Comme si les transactions s'exécutaient l'une après l'autre ; peut échouer avec une erreur de sérialisation |
READ UNCOMMITTED existe mais se comporte comme READ COMMITTED : PostgreSQL ne permet pas de lire des données non validées.
Les anomalies à connaître#
| Anomalie | Exemple |
|---|---|
| Lecture non répétable | Deux SELECT identiques dans la même transaction renvoient des valeurs différentes |
| Fantôme | Deuxième requête sur un même filtre qui voit de nouvelles lignes |
| Mise à jour perdue | Deux transactions lisent stock = 5, chacune écrit 4 : un décrément disparaît |
| Write skew | Deux transactions lisent le même ensemble et écrivent dans des lignes différentes, violant ensemble une règle (deux médecins de garde partent en même temps) |
BEGIN ISOLATION LEVEL SERIALIZABLE;
-- ... lectures et écritures ...
COMMIT; -- peut échouer : ERROR 40001 serialization_failure
Astuce : aux niveaux
REPEATABLE READetSERIALIZABLE, prévoyez de réessayer la transaction complète sur les erreurs40001(sérialisation) et40P01(deadlock). Ce n'est pas une panne, c'est le contrat.