För att automatisera detta kan du definiera den främmande nyckeln med ON DELETE CASCADE
.
Jag citerar handboken för främmande nyckelbegränsningar
:
Slå upp den nuvarande FK-definitionen så här:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
Lägg sedan till eller ändra ON DELETE ...
del till ON DELETE CASCADE
(bevara allt annat som det är) i ett uttalande som:
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
Det finns ingen ALTER CONSTRAINT
kommando. Släpp och återskapa begränsningen i en enda ALTER TABLE
uttalande för att undvika möjliga tävlingsförhållanden med samtidig skrivåtkomst.
Du behöver privilegierna för att göra det, uppenbarligen. Åtgärden tar en ACCESS EXCLUSIVE
lås på bordet kontakty
och en SHARE ROW EXCLUSIVE
lås på tabellen osoby
.
Om du inte kan ALTER
tabellen, radera sedan för hand (en gång) eller med trigger BEFORE DELETE
(varje gång) är de återstående alternativen.