Erreur PostgreSQL : could not serialize access

ERROR:  could not serialize access due to concurrent update

-- oppure, a livello Serializable:
ERROR:  could not serialize access due to read/write dependencies among transactions
DETAIL:  Reason code: Canceled on identification as a pivot, during commit attempt.
HINT:  The transaction might succeed if retried.

Cette erreur n'existe qu'aux niveaux d'isolation Repeatable Read et Serializable, et c'est ces niveaux qui fonctionnent comme prévu : PostgreSQL n'a pas pu produire un résultat cohérent avec les garanties que vous avez demandées, il a donc annulé votre transaction plutôt que de renvoyer silencieusement quelque chose de faux.

Ce que signifie cette erreur

Les deux variantes correspondent aux deux niveaux :

Dans les deux cas, la transaction a subi un rollback et, comme le dit le HINT, réussirait probablement si on la relançait simplement. Le SQLSTATE est 40001 dans les deux cas.

Causes fréquentes

Comment la diagnostiquer

Comment la corriger

🔍 À lire aussi : Les niveaux d'isolation des transactions en pratique — ce que garantit chaque niveau, le write skew, et une section complète sur réessayer correctement.