Fehler 23503 (verletzt Fremdschlüssel-Constraint)

Hallo zusammen,

bei dem Fehler wird immer nur eine Tabelle angegeben wo die Verletzung stattfand
Wenn ich nun mehrere Tabellen habe die alle die selbe Verletzung haben; gibt es eine Möglichkeit alle Tabellen die das betrifft aufzulisten.

z.B. habe ich eine Vertreter-Tabelle. Die Vertreter-Nr gibt es im Kundenstamm und im Auftrag
Wenn ich nun versuche einen Vertreter zu löschen, der in beiden Tabellen drin steht, wird nur eine Tabelle angezeigt. Schön wäre es wenn beide Tabellen angegeben würden

Danke für eure Hilfe

Die Fehlermeldung beinhaltet auch den Namen des Constraints der verletzt wurde.

insert or update on table “child_one” violates foreign key constraint “child_one_parent_id_fkey”
oder
update or delete on table “parent” violates foreign key constraint “child_one_parent_id_fkey” on table “child_one”

Du kannst am Namen schon sehen, dass die Spalten “parent_id” die FK Spalte in der Tabelle “child_one” ist.

Wenn das nicht als Information reicht (oder Du einen nichtssagenden Namen für den FK vergeben hast), kannst Du die dazugehörenden Tabellen ermitteln:

select conrelid::regclass::text as referencing_table,
       confrelid::regclass::text as referenced_table
from pg_constraint c
where c.conname = 'child_one_parent_id_fkey'
  and c.connamespace = 'public'::regnamespace; --- Schema anpassen wenn nötig

Hallo,

liefert leider nicht das gewünschte Ergebniss der constraint hat ja auf den Tabellen abweichende Namen
Auftrag:
CONSTRAINT fk_auftrag_vertreter FOREIGN KEY (vt_id)
REFERENCES mcs_mandant01.vertreter_stamm (vt_id)
Debitor
CONSTRAINT fk_debitor_vertreter FOREIGN KEY (vt_id)
REFERENCES mcs_mandant01.vertreter_stamm (vt_id) MATCH SIMPLE

Wenn ich nun aus dem vertreter_stamm einen Vertreter löschen möchte, der in der Auftrags und in der Debitor-Tabelle enthalten ist, würde ich gerne beide Tabellen also VT ist in Auftrag und in Debitor enthalten bekommen

Postgres bricht bei der Verletzung des “ersten” Constraints ab. Die Fehlermeldung wird sich also immer nur auf einen der beiden FKs beziehen.

Schade … aber danke für deine Hilfe!

Du kannst Dir natürlich per SQL ausgeben lassen, welche FK von welchen Tabellen auf den PK Deiner Vertreter Tabelle zeigen.

Aber was ganz anderes:
Wenn Du das wirklich machst, diesen Vertreter löschen, dann ist ziemlich offensichtlich, dass Du alle abhängigen Datensätze löschen müsstest, direkt oder indirekt abhängig. Willst Du das? Ich würde solche Datensätze eher deaktivieren und anonymisieren.
Es geht doch vermutlich hauptsächlich darum, dass dieser Vertreter bei neuen Geschäften nicht mehr als Referenz eingetragen werden kann?

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.