Để tự động hóa việc này, bạn có thể xác định ràng buộc khóa ngoại với ON DELETE CASCADE
.
Tôi trích dẫn hướng dẫn cho ràng buộc khóa ngoại
:
Tra cứu định nghĩa FK hiện tại như sau:
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
Sau đó thêm hoặc sửa đổi ON DELETE ...
một phần của ON DELETE CASCADE
(giữ nguyên mọi thứ khác) trong một tuyên bố như:
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
Không có ALTER CONSTRAINT
yêu cầu. Thả và tạo lại ràng buộc trong một ALTER TABLE
để tránh các điều kiện chạy đua có thể xảy ra với quyền truy cập ghi đồng thời.
Rõ ràng là bạn cần có đặc quyền để làm như vậy. Thao tác sử dụng ACCESS EXCLUSIVE
khóa trên bàn kontakty
và SHARE ROW EXCLUSIVE
khóa trên bàn osoby
.
Nếu bạn không thể ALTER
bảng, sau đó xóa bằng tay (một lần) hoặc bằng cách kích hoạt BEFORE DELETE
(mọi lúc) là các tùy chọn còn lại.