2013-08-29 32 views
23

Trong cơ sở dữ liệu PostgreSQL của tôi, tôi có một chỉ số duy nhất được tạo ra theo cách này:Hủy bỏ độc đáo của chỉ số trong PostgreSQL

CREATE UNIQUE INDEX my_index ON my_table USING btree (my_column) 

Có cách nào để thay đổi các chỉ số để loại bỏ hạn chế duy nhất? Tôi nhìn thorugh ALTER INDEX documentation nhưng nó dường như không làm những gì tôi cần.

Tôi biết tôi có thể xóa chỉ mục và tạo một chỉ mục khác, nhưng tôi muốn tìm một cách tốt hơn nếu nó tồn tại.

Trả lời

32

Bạn có thể xóa số duy nhất CONSTRAINT chứ không phải chính mình là INDEX.

Kiểm tra của bạn CONSTRAINTS qua select * from information_schema.table_constraints;

Sau đó, nếu bạn tìm thấy một, bạn sẽ có thể thả nó thích:

ALTER TABLE "my_table" DROP CONSTRAINT "unique_something"

Edit: một vấn đề liên quan được mô tả trong this question

+0

Cảm ơn đã gợi ý. Thật không may là không có những ràng buộc như vậy. –

+0

Vâng, tôi nghĩ về điều này quá, nhưng kiểm tra nó trong Postgres ... thêm một chỉ mục duy nhất không thêm một ràng buộc vào bảng ... nó có vẻ là một phần của chính chỉ mục đó. – dcsohl

+0

@dcsohl Yep. Điều này thật thú vị, tôi đã xem xét nó và theo [câu hỏi này] (http://stackoverflow.com/questions/6239657/postgresql-can-you-create-an-index-in-the-create-table-definition# 6239678) ràng buộc duy nhất có thể tạo chỉ mục (nhưng không phải là cách khác xung quanh) –

4

Tôi không nghĩ là có thể ... ngay cả trong giao diện người dùng pgAdmin III, nếu bạn cố chỉnh sửa ràng buộc được tạo bằng câu lệnh của mình, hộp "Duy nhất" có màu xám; bạn không thể thay đổi nó thông qua giao diện người dùng. Kết hợp với nghiên cứu của bạn trên các tài liệu ALTER INDEX, tôi muốn nói rằng nó không thể được thực hiện.

2

Giả sử bạn có các thông tin sau:

Indexes: 
    "feature_pkey" PRIMARY KEY, btree (id, f_id) 
    "feature_unique" UNIQUE, btree (feature, f_class) 
    "feature_constraint" UNIQUE CONSTRAINT, btree (feature, f_class) 

Để thả các hạn chế duy nhất, bạn sẽ sử dụng ALTER TABLE:

ALTER TABLE feature DROP CONSTRAINT feature_constraint; 

Để thả UNIQUE [index], bạn sẽ sử dụng DROP INDEX:

DROP INDEX feature_unique; 
+1

tại sao tài liệu chính thức không chứa ví dụ như thế này –

Các vấn đề liên quan