Per automatizzare questo, puoi definire il vincolo di chiave esterna con ON DELETE CASCADE
.
Cito il il manuale per vincoli di chiave esterna
:
Cerca l'attuale definizione FK in questo modo:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
Quindi aggiungi o modifica il ON DELETE ...
parte a ON DELETE CASCADE
(conservando tutto il resto così com'è) in una dichiarazione come:
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
Non ci sono ALTER CONSTRAINT
comando. Elimina e ricrea il vincolo in un unico ALTER TABLE
dichiarazione per evitare possibili condizioni di gara con accesso in scrittura simultaneo.
Hai bisogno dei privilegi per farlo, ovviamente. L'operazione richiede un ACCESS EXCLUSIVE
lock on table kontakty
e un SHARE ROW EXCLUSIVE
lock on table osoby
.
Se non riesci a ALTER
la tabella, quindi eliminando manualmente (una volta) o tramite trigger BEFORE DELETE
(ogni volta) sono le opzioni rimanenti.