Um dies zu automatisieren, könnten Sie die Fremdschlüsseleinschränkung mit ON DELETE CASCADE
definieren .
Ich zitiere das Handbuch für Fremdschlüsseleinschränkungen
:
Suchen Sie die aktuelle FK-Definition wie folgt:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
Fügen Sie dann den ON DELETE ...
hinzu oder ändern Sie ihn Teil zu ON DELETE CASCADE
(wobei alles andere unverändert bleibt) in einer Anweisung wie:
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
Es gibt kein ALTER CONSTRAINT
Befehl. Löschen Sie die Einschränkung und erstellen Sie sie in einem einzelnen ALTER TABLE
neu -Anweisung, um mögliche Race-Conditions bei gleichzeitigem Schreibzugriff zu vermeiden.
Natürlich benötigen Sie die Berechtigungen dazu. Die Operation nimmt einen ACCESS EXCLUSIVE
an Sperre auf Tabelle kontakty
und ein SHARE ROW EXCLUSIVE
Sperre auf Tabelle osoby
.
Wenn Sie nicht ALTER
können der Tabelle, dann manuelles Löschen (einmalig) oder per Trigger BEFORE DELETE
(jedes Mal) sind die verbleibenden Optionen.