</>
Plan du cours — 32/64

Niveaux d'isolation et anomalies

Avancé

Le niveau d'isolation détermine ce qu'une transaction voit des changements concurrents.

NiveauComportement dans PostgreSQL
READ COMMITTED (défaut)Chaque instruction voit les données validées au moment où elle démarre
REPEATABLE READLa transaction voit un instantané figé au premier accès ; pas de lecture non répétable ni de fantômes
SERIALIZABLEComme 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#

AnomalieExemple
Lecture non répétableDeux SELECT identiques dans la même transaction renvoient des valeurs différentes
FantômeDeuxième requête sur un même filtre qui voit de nouvelles lignes
Mise à jour perdueDeux transactions lisent stock = 5, chacune écrit 4 : un décrément disparaît
Write skewDeux 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 READ et SERIALIZABLE, prévoyez de réessayer la transaction complète sur les erreurs 40001 (sérialisation) et 40P01 (deadlock). Ce n'est pas une panne, c'est le contrat.