Làm thế nào để bạn bỏ một ràng buộc kiểm tra không tên trong bảng PostgresQL?


9

Tôi đã tạo bảng PostgresQL nhưng tôi đã thêm một ràng buộc kiểm tra không tên trên một trong các cột:

CREATE TABLE FOO
(
id serial primary key,
price_range smallint CHECK (price_range > 0),
url varchar(255)
);

Bây giờ tôi muốn loại bỏ ràng buộc này nhưng tôi không thể tìm ra cách. BẢNG ALTER điển hình ... DROP CONSTRAINT ... cần một constraint_namenhưng tôi không có.

Tôi biết có một câu trả lời ở đây nhưng khi tôi cố gắng xác định tên của ràng buộc kiểm tra của mình bằng cách làm theo câu trả lời ở đó:

SELECT *
FROM information_schema.constraint_table_usage
WHERE table_name = 'your_table'

Tất cả những gì tôi nhận được là một ràng buộc duy nhất có constraint_namemục nhập foo pkeyliên quan đến ràng buộc khóa chính và không phải là kiểm tra của tôi trên pricecột. Vì vậy, câu trả lời đó đã không giúp tôi, trừ khi tôi đang thiếu một cái gì đó.

Làm thế nào tôi có thể bỏ ràng buộc này mà không mất bất kỳ dữ liệu nào?

Cảm ơn!

Câu trả lời:


10

Các ràng buộc có một tên, cho dù bạn đã chỉ định nó hay không.

Từ psql, \d foosẽ liệt kê tất cả các ràng buộc bảng, cùng với các tên được gán tự động của chúng.

Bạn cũng có thể tìm thấy những thứ này bằng cách truy vấn trực tiếp các bảng danh mục:

SELECT conname
FROM pg_constraint
WHERE
  conrelid = 'foo'::regclass AND
  contype = 'c'

Tên bảng có thể đủ tiêu chuẩn lược đồ nếu cần thiết (ví dụ 'public.foo'::regclass).

contype = 'c'lọc nó xuống các CHECKràng buộc; các contypegiá trị cho các loại ràng buộc khác được ghi lại ở đây .

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.