40P01: deadlock_detected
PostgreSQLQue signifie cette erreur ?
Deux transactions ou plus sont entrées en interblocage, chacune attendant des verrous détenus par l'autre. PostgreSQL détecte le cycle et annule l'une des transactions.
Cause
Verrous acquis dans des ordres différents, mises à jour croisées des mêmes lignes, longues transactions, ou verrous en conflit pris lors des vérifications de clés étrangères.
Comment la corriger
Le détail de l'interblocage dans le journal du serveur indique les requêtes en conflit. Accédez aux tables/lignes dans le même ordre dans toutes les transactions. Gardez les transactions courtes. Interceptez la transaction annulée dans l'application et relancez-la. Joignez pg_locks à pg_stat_activity pour examiner les verrous. Si nécessaire, rendez l'ordre de verrouillage explicite avec SELECT ... FOR UPDATE.