40002: transaction_integrity_constraint_violation
PostgreSQLQue signifie cette erreur ?
Le code du standard SQL pour la violation, au COMMIT, d'une contrainte d'intégrité vérifiée en fin de transaction. Important : PostgreSQL ne produit pas ce code en pratique ; il renvoie les violations de contraintes différées (DEFERRED) au COMMIT avec le code propre à la contrainte : 23503 pour les clés étrangères, 23505 pour l'unicité.
Cause
Une contrainte de clé étrangère ou d'unicité définie DEFERRABLE INITIALLY DEFERRED a été temporairement rompue lors d'étapes intermédiaires de la transaction et non rétablie au moment du COMMIT ; dans PostgreSQL, cela est signalé par 23503/23505. Par exemple, insérer dans le mauvais ordre des lignes qui se référencent mutuellement sans les corriger en est la cause.
Comment la corriger
Corrigez la logique de la transaction pour que toutes les contraintes différées soient satisfaites avant le COMMIT (ajoutez les références manquantes, résolvez les conflits). Si nécessaire, vérifiez la contrainte tôt dans la transaction avec SET CONSTRAINTS ... IMMEDIATE pour détecter plus tôt l'étape problématique. Réordonnez les insertions/mises à jour pour les références mutuelles.