Chcete-li to automatizovat, můžete definovat omezení cizího klíče pomocí ON DELETE CASCADE
.
Cituji příručku pro omezení cizího klíče
:
Vyhledejte aktuální definici FK takto:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
Poté přidejte nebo upravte ON DELETE ...
část na ON DELETE CASCADE
(zachování všeho ostatního tak, jak je) v příkazu jako:
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
Neexistuje žádné ALTER CONSTRAINT
příkaz. Zrušte a znovu vytvořte omezení v jediné ALTER TABLE
prohlášení, abyste se vyhnuli možným závodům se současným přístupem pro zápis.
K tomu samozřejmě potřebujete oprávnění. Operace vyžaduje ACCESS EXCLUSIVE
zámek na stole kontakty
a SHARE ROW EXCLUSIVE
zámek na stůl osoby
.
Pokud nemůžete ALTER
tabulku a poté smazání ručně (jednou) nebo spouštěčem BEFORE DELETE
(pokaždé) jsou zbývající možnosti.