23P01: exclusion_violation
PostgreSQLQue signifie cette erreur ?
Une contrainte EXCLUDE (d'exclusion) a été violée. Ce type de contrainte empêche deux lignes d'entrer en conflit selon des opérateurs précis (par ex. chevauchement de plages &&) ; la ligne insérée/mise à jour a été refusée car elle entre en conflit avec une ligne existante.
Cause
Typiquement, une contrainte EXCLUDE basée sur GiST est définie (par ex. interdire les chevauchements de périodes avec tstzrange && pour des réservations de rendez-vous/salles) et la nouvelle ligne a une plage/valeur qui chevauche une ligne existante. Peut aussi se produire lorsque deux transactions concurrentes insèrent des plages qui se chevauchent.
Comment la corriger
Vérifiez le chevauchement par une requête avant l'insertion, ou interceptez l'erreur dans l'application et affichez un message explicite à l'utilisateur. Interrogez la plage/condition concernée pour trouver la ligne existante en conflit. Si la règle métier autorise les chevauchements, assouplissez la contrainte ; sinon corrigez la saisie. En cas de concurrence, relancez la transaction en toute sécurité pour la sérialiser.