Sửa đổi ràng buộc bảng trong PostgreSQL


9

Nói rằng tôi có một ràng buộc

ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);

cần phải được sửa đổi để có độ dài mã zip 6.

Tôi có bỏ các ràng buộc zipchkđầu tiên và sau đó tạo lại nó?

ALTER TABLE distributors DROP CONSTRAINT zipchk;
ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 6);

hoặc có một MODIFYlệnh (như):

ALTER TABLE distributors MODIFY CONSTRAINT zipchk CHECK (char_length(zipcode) = 6);

2
Không có modifyràng buộc (được ghi lại rõ ràng trong hướng dẫn ). Bạn cần phải thả và tạo lại nó.
a_horse_with_no_name 2/12/2015

1
Nhưng tôi nghĩ rằng nó có thể được thực hiện trong một tuyên bố duy nhất.
ypercubeᵀᴹ

Có một tùy chọn ALTER CONSTRAINTtrong 9,4 nhưng chỉ hoạt động đối với các ràng buộc khóa ngoài. postgresql.org/docs/civerse/static/sql-altertable.html
user4150760

Câu trả lời:


21

Để tổng hợp các ý kiến:

Giống như @ypercube gợi ý , bạn có thể thực hiện nó trong một lệnh duy nhất , rẻ hơn và an toàn hơn:

ALTER TABLE distributors
  DROP CONSTRAINT zipchk
, ADD  CONSTRAINT zipchk CHECK (length(zipcode) = 6);

ALTER CONSTRAINTtrong Postgres 9.4 trở lên (như bạn đã tìm thấy) chỉ có thể thay đổi "độ trễ" của các ràng buộc FK. Vì vậy, không phải những gì bạn đang tìm kiếm. Ngoài ra, không có lệnh " MODIFY(thích)" cho các ràng buộc (tham khảo MODIFYtôi giả sử của MySQL ).

Chi tiết trong hướng dẫn sử dụngALTER TABLE , như @a_horse đã đề cập.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.