Aby to zautomatyzować, możesz zdefiniować ograniczenie klucza obcego za pomocą ON DELETE CASCADE
.
Cytuję instrukcję ograniczenia klucza obcego
:
Sprawdź aktualną definicję FK w ten sposób:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
Następnie dodaj lub zmodyfikuj ON DELETE ...
część do ON DELETE CASCADE
(zachowując wszystko inne tak, jak jest) w oświadczeniu typu:
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
Nie ma ALTER CONSTRAINT
Komenda. Upuść i ponownie utwórz ograniczenie w jednej ALTER TABLE
oświadczenie, aby uniknąć możliwych warunków wyścigu z równoczesnym dostępem do zapisu.
Oczywiście potrzebujesz do tego uprawnień. Operacja zajmuje ACCESS EXCLUSIVE
zablokuj na stole kontakty
i SHARE ROW EXCLUSIVE
zablokuj na stole osoby
.
Jeśli nie możesz ALTER
tabeli, a następnie usuwanie ręcznie (jednorazowo) lub wyzwalaczem BEFORE DELETE
(za każdym razem) to pozostałe opcje.