Ich habe einige Tabellen in Postgres erstellt, einen Fremdschlüssel aus einer Tabelle in einen anderen hinzugefügt und ON DELETE auf CASCADE gesetzt. Seltsamerweise habe ich einige Felder, die diese Einschränkung zu verletzen scheinen.Fremdschlüssel in Postgresql kann durch Auslöser verletzt werden
Ist das normales Verhalten? Und wenn ja, gibt es eine Möglichkeit, das gewünschte Verhalten zu erreichen (keine Verstöße möglich)?
Edit:
I orginaly der Fremdschlüssel als Teil erstellt Tabelle von CREATE, nur mit
... REFERENCES product (id) ON UPDATE CASCADE ON DELETE CASCADE
Der aktuelle Code pgAdmin3
ALTER TABLE cultivar
ADD CONSTRAINT cultivar_id_fkey FOREIGN KEY (id)
REFERENCES product (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;
bearbeiten 2 ergibt:
Zur Klärung habe ich den schleichenden Verdacht, dass die Einschränkungen nur beim Update überprüft werden s/Inserts passieren aber werden dann nie wieder angeschaut. Leider weiß ich nicht genug über Postgres, um herauszufinden, ob das wahr ist oder wie Felder in der Datenbank landen könnten, ohne dass diese Prüfungen ausgeführt werden.
Wenn dies der Fall ist, gibt es eine Möglichkeit, alle Fremdschlüssel zu überprüfen und diese Probleme zu beheben?
bearbeiten 3:
eine Beschränkungsverletzung kann durch einen fehlerhaften Trigger ausgelöst werden, siehe unten
nur für eine Gesundheitsprüfung können Sie die Anweisung, die Sie zum Erstellen der FK? –
In welcher PG-Version sind Sie angemeldet? – Kuberchaun
Ich benutze Version 8.3 –