За да автоматизирате това, можете да дефинирате ограничението за външен ключ с ON DELETE CASCADE
.
Цитирам ръководството за ограничения на външен ключ
:
Потърсете текущата дефиниция на FK по следния начин:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
След това добавете или променете ON DELETE ...
част от ON DELETE CASCADE
(запазвайки всичко останало както е) в израз като:
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
Няма ALTER CONSTRAINT
команда. Премахнете и създайте отново ограничението в една единствена ALTER TABLE
израз за избягване на възможни условия на състезание с едновременен достъп за запис.
Нуждаете се от привилегиите, за да го направите, очевидно. Операцията изисква ACCESS EXCLUSIVE
заключване на таблица kontakty
и SHARE ROW EXCLUSIVE
заключване на таблица osoby
.
Ако не можете да ALTER
таблицата, след което изтриване на ръка (веднъж) или чрез тригер BEFORE DELETE
(всеки път) са останалите опции.