Tôi khá chắc rằng bạn không thể chỉ cần thêm on delete cascade
đối với một ràng buộc khóa ngoại hiện có. Bạn phải loại bỏ ràng buộc trước, sau đó thêm phiên bản chính xác. Trong SQL chuẩn, tôi tin rằng cách dễ nhất để làm điều này là
- bắt đầu một giao dịch,
- bỏ khóa ngoại,
- thêm khóa ngoại với
on delete cascade
và cuối cùng - cam kết giao dịch
Lặp lại cho từng khóa ngoại bạn muốn thay đổi.
Nhưng PostgreSQL có một phần mở rộng không chuẩn cho phép bạn sử dụng nhiều mệnh đề ràng buộc trong một câu lệnh SQL duy nhất. Ví dụ
alter table public.scores
drop constraint scores_gid_fkey,
add constraint scores_gid_fkey
foreign key (gid)
references games(gid)
on delete cascade;
Nếu bạn không biết tên của ràng buộc khóa ngoại mà bạn muốn loại bỏ, bạn có thể tra cứu nó trong pgAdminIII (chỉ cần nhấp vào tên bảng và xem DDL hoặc mở rộng phân cấp cho đến khi bạn thấy "Các ràng buộc"), hoặc bạn có thể truy vấn lược đồ thông tin.
select *
from information_schema.key_column_usage
where position_in_unique_constraint is not null