Om dit te automatiseren, kunt u de externe sleutelbeperking definiëren met ON DELETE CASCADE
.
Ik citeer de de handleiding voor beperkingen voor externe sleutels
:
Zoek de huidige FK-definitie als volgt op:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
Voeg vervolgens de ON DELETE ...
. toe of wijzig deze deel naar ON DELETE CASCADE
(alle andere behouden zoals het is) in een verklaring als:
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
Er is geen ALTER CONSTRAINT
opdracht. Laat de beperking vallen en creëer deze opnieuw in een enkele ALTER TABLE
statement om mogelijke race-omstandigheden met gelijktijdige schrijftoegang te voorkomen.
Je hebt natuurlijk de privileges nodig om dit te doen. De operatie duurt een ACCESS EXCLUSIVE
slot op tafel kontakty
en een SHARE ROW EXCLUSIVE
slot op tafel osoby
.
Als je ALTER
niet kunt de tabel, vervolgens handmatig verwijderen (eenmalig) of door trigger BEFORE DELETE
(elke keer) zijn de overige opties.