2013-08-29 24 views
23

刪除指數的獨特性在我的PostgreSQL數據庫我有一個唯一索引創建這樣:PostgreSQL中

CREATE UNIQUE INDEX my_index ON my_table USING btree (my_column) 

有沒有辦法改變該指數將刪除唯一約束?我看着ALTER INDEX documentation,但它似乎並沒有做我所需要的。

我知道我可以刪除索引並創建另一個索引,但是如果索引存在,我希望找到更好的方法。

回答

32

您也許能夠刪除唯一的CONSTRAINT,而不是INDEX本身。

檢查CONSTRAINTS通過select * from information_schema.table_constraints;

然後,如果你找到一個,你應該能夠放棄它喜歡:

ALTER TABLE "my_table" DROP CONSTRAINT "unique_something"

編輯:一個相關的問題this question

+0

感謝您的建議。不幸的是,沒有這樣的限制。 –

+0

是的,我想到了這一點,但在Postgres中檢查了它...添加一個唯一的索引不會爲表添加約束......它似乎是索引本身的一部分。 – dcsohl

+0

@dcsohl是的。這很有趣,我研究它並根據[這個問題](http://stackoverflow.com/questions/6239657/postgresql-can-you-create-an-index-in-the-create-table-definition# 6239678)唯一的約束可以創建索引(但不是其他方式) – 2013-08-29 16:11:14

4

我不認爲這是可能的......即使在pgAdmin III用戶界面中,如果您嘗試編輯使用您的語句創建的約束,「唯一」框會變灰;你不能通過UI改變它。結合你對ALTER INDEX文檔的研究,我會說它不能完成。

2

描述假設您有以下幾種:

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

要刪除唯一約束,你可以使用ALTER TABLE

ALTER TABLE feature DROP CONSTRAINT feature_constraint; 

要刪除的UNIQUE [索引],你可以使用DROP INDEX

DROP INDEX feature_unique; 
+1

爲什麼官方文檔不包含這樣的例子 –