DBAtlas · Atlas d'exploitation des bases de données

23P01: exclusion_violation

PostgreSQL

Que 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.

Ouvrir dans DBAtlas →

Autres entrées pour ce moteur