Tôi đã tạo một số bảng trong postgres, thêm khóa ngoài từ bảng này sang bảng khác và đặt ON DELETE thành CASCADE. Thật kỳ lạ, tôi có một số trường dường như vi phạm ràng buộc này.Các khóa ngoại trong postgresql có thể bị vi phạm bởi kích hoạt
Đây có phải là hành vi bình thường không? Và nếu có, có cách nào để có được hành vi mà tôi muốn (không có vi phạm)?
Edit:
tôi orginaly tạo phím nước ngoài như là một phần của CREATE TABLE, chỉ cần sử dụng
... REFERENCES product (id) ON UPDATE CASCADE ON DELETE CASCADE
Mã pgAdmin3 hiện cho được
ALTER TABLE cultivar
ADD CONSTRAINT cultivar_id_fkey FOREIGN KEY (id)
REFERENCES product (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;
Chỉnh sửa 2:
Để làm rõ, tôi có một nghi ngờ lén lút rằng các ràng buộc chỉ được kiểm tra khi cập nhật s/chèn xảy ra nhưng sau đó không bao giờ nhìn lại. Thật không may tôi không biết đủ về postgres để tìm hiểu xem điều này là đúng hay làm thế nào các lĩnh vực có thể kết thúc trong cơ sở dữ liệu mà không kiểm tra được chạy.
Nếu trường hợp này xảy ra, có cách nào để kiểm tra tất cả các khóa ngoại và khắc phục các sự cố đó không?
Sửa 3:
Vi phạm chế có thể được gây ra bởi một nút bấm bị lỗi, xem dưới đây
chỉ để kiểm tra sự lành mạnh, bạn có thể đăng tuyên bố bạn đã sử dụng để tạo FK không? –
Bạn đang sử dụng phiên bản PG nào? – Kuberchaun
Tôi đang sử dụng phiên bản 8.3 –