2010-06-09 44 views
41

Tôi dường như không thể có được quyền này, tôi đang cố gắng sửa đổi một trường là khóa ngoài, với việc xóa tầng ... tôi đang làm gì sai?Ràng buộc Postgresql

ALTER TABLE my_table 
ADD CONSTRAINT $4 
FOREIGN KEY my_field 
REFERENCES my_foreign_table 
ON DELETE CASCADE; 

Trả lời

76

Nó sẽ giúp đỡ nếu bạn đăng các thông báo lỗi. Nhưng tôi nghĩ rằng bạn đang chỉ thiếu ngoặc:

ALTER TABLE my_table 
ADD CONSTRAINT my_fk 
FOREIGN KEY (my_field) 
REFERENCES my_foreign_table 
ON DELETE CASCADE; 
+1

@Magnus Hagander, tại sao là 'trên cascade delete' hữu ích? Tôi không hiểu ... –

+4

@Stephane Xem câu trả lời được chấp nhận cho [câu hỏi này] (http://stackoverflow.com/questions/14141266/postgresql-foreign-key-on-delete-cascade) "_A khóa ngoại với việc xóa tầng có nghĩa là nếu một bản ghi trong bảng cha bị xóa, thì các bản ghi tương ứng trong bảng con sẽ tự động bị xóa. Điều này được gọi là xóa tầng._ "Có vẻ như một cái gì đó bạn không muốn tự động bao gồm trừ khi bạn muốn gắn các bảng lại với nhau thay vì chỉ tạo một tham chiếu. –

+0

@RichardD, khi bạn không bao gồm nó, bạn phải sử dụng từ khóa CASCADE với truy vấn, và bạn nhớ hậu quả sau đó :) – Line

12

Chỉ cần đoán: bạn không nên thêm khóa ngoại thay vì ràng buộc?

ALTER TABLE my_table ADD FOREIGN KEY (my_field) REFERENCES my_foreign_table; 

Postgresql reference

+12

một khóa ngoại * là * một hạn chế ... –

12

tôi vẫn bằng cách nào đó mất tích ở đây một câu trả lời với cột nước ngoài (foreign_field) quy định một cách rõ ràng:

ALTER TABLE my_table 
ADD CONSTRAINT my_fk 
FOREIGN KEY (my_field) 
REFERENCES my_foreign_table (foreign_field) 
ON DELETE CASCADE; 
1

này hoạt động với tôi, tôi thêm cột vào bảng và sau đó thêm các hạn chế với tham chiếu đến bảng khác:

-- add column to table 
ALTER TABLE schema.table ADD COLUMN my_column type; 

-- add constraint to column 
ALTER TABLE schema.table ADD CONSTRAINT fk_name FOREIGN KEY (column) 
REFERENCES schema.table (column) MATCH SIMPLE 
ON UPDATE NO ACTION ON DELETE NO ACTION;