23P01: exclusion_violation
PostgreSQLWas bedeutet das?
Ein EXCLUDE-Constraint (Exclusion Constraint) wurde verletzt. Dieser Constraint-Typ verhindert, dass zwei Zeilen gemäß bestimmten Operatoren (z. B. Bereichsüberlappung &&) kollidieren; die eingefügte/aktualisierte Zeile wurde abgelehnt, weil sie mit einer vorhandenen Zeile kollidiert.
Ursache
Typischerweise ist ein GiST-basierter EXCLUDE-Constraint definiert (z. B. Verbot zeitlicher Überlappungen mit tstzrange && für Termin-/Raumbuchungen), und die neue Zeile hat einen Bereich/Wert, der eine vorhandene Zeile überlappt. Kann auch auftreten, wenn zwei parallele Transaktionen überlappende Bereiche einfügen.
Lösung
Prüfe vor dem Einfügen per Abfrage auf Überlappung oder fange den Fehler in der Anwendung ab und zeige dem Benutzer eine aussagekräftige Meldung. Frage den betreffenden Bereich bzw. die Bedingung ab, um die kollidierende vorhandene Zeile zu finden. Erlaubt die Geschäftsregel Überlappungen, lockere den Constraint; andernfalls korrigiere die Eingabe. Wiederhole die Transaktion bei Parallelität sicher, um sie zu serialisieren.