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
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
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
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?