Untuk mengotomatisasi ini, Anda dapat menentukan batasan kunci asing dengan ON DELETE CASCADE
.
Saya mengutip manual untuk batasan kunci asing
:
Cari definisi FK saat ini seperti ini:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
Kemudian tambahkan atau ubah ON DELETE ...
bagian ke ON DELETE CASCADE
(mempertahankan yang lainnya apa adanya) dalam pernyataan seperti:
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
Tidak ada ALTER CONSTRAINT
memerintah. Jatuhkan dan buat ulang batasan dalam satu ALTER TABLE
pernyataan untuk menghindari kemungkinan kondisi balapan dengan akses tulis bersamaan.
Anda memerlukan hak istimewa untuk melakukannya, tentu saja. Operasi membutuhkan ACCESS EXCLUSIVE
kunci di atas meja kontakty
dan SHARE ROW EXCLUSIVE
kunci di atas meja osoby
.
Jika Anda tidak dapat ALTER
tabel, lalu hapus dengan tangan (sekali) atau dengan pemicu BEFORE DELETE
(setiap waktu) adalah opsi yang tersisa.