40001: serialization_failure
PostgreSQLQue signifie cette erreur ?
Sous le niveau d'isolation SERIALIZABLE ou REPEATABLE READ, la transaction n'a pas pu être sérialisée, car elle est entrée en conflit avec des modifications concurrentes, et elle a été annulée. C'est un comportement attendu qui protège la cohérence des données.
Cause
Transactions accédant simultanément aux mêmes données ne pouvant pas être ordonnées de façon sérialisable, conflits d'écriture sous forte concurrence, ou dépendances dangereuses détectées par SSI (Serializable Snapshot Isolation).
Comment la corriger
Ce n'est pas un bogue mais un signal attendu : relancez la transaction telle quelle. Ajoutez une logique de relance automatique dans l'application. Pour réduire les conflits, raccourcissez les transactions et utilisez un niveau d'isolation inférieur (READ COMMITTED) s'il n'est pas réellement nécessaire. Concevez de façon à réduire la contention sur les lignes chaudes.