23001: restrict_violation
PostgreSQLWas bedeutet das?
Der SQL-Standardcode restrict_violation. Wichtig: PostgreSQL meldet die Verletzung eines mit ON DELETE/ON UPDATE RESTRICT oder NO ACTION definierten Foreign Keys nicht mit diesem Code, sondern mit 23503 (foreign_key_violation); in der Praxis siehst du diesen Code vom PostgreSQL-Kern nicht.
Ursache
Wird eine Elternzeile mit abhängigen Kindzeilen gelöscht oder ihr Schlüssel geändert, liefert PostgreSQL 23503. 23001 taucht meist in aus einer anderen Datenbank portiertem Anwendungscode oder als eigener Fehler einer Extension auf. Anders als NO ACTION kann RESTRICT die Prüfung nicht ans Ende der Transaktion verschieben und schlägt sofort fehl.
Lösung
Lösche bzw. aktualisiere zuerst die abhängigen Kindzeilen oder verschiebe sie zu einem anderen Elternteil; verarbeite dann die Elternzeile. Erlaubt die Geschäftsregel es, erwäge, den Foreign Key mit ON DELETE CASCADE oder SET NULL neu zu definieren. Halte bei Massenlöschungen die richtige Löschreihenfolge ein (zuerst Kind, dann Eltern).