删除PostgreSQL中索引的唯一性

Ser*_*pov 54 sql database postgresql

在我的PostgreSQL数据库中,我有一个以这种方式创建的唯一索引:

CREATE UNIQUE INDEX <my_index> ON <my_table> USING btree (my_column)
Run Code Online (Sandbox Code Playgroud)

有没有办法改变索引以删除唯一约束?我看了很多 ALTER INDEX文档,但它似乎没有做我需要的.

我知道我可以删除索引并创建另一个索引,但如果它存在,我想找到更好的方法.

小智 85

您可以删除唯一的CONSTRAINT,而不是INDEX自身.

检查你的CONSTRAINTS通行证select * from information_schema.table_constraints;

然后,如果你找到一个,你应该能够放弃它:

ALTER TABLE <my_table> DROP CONSTRAINT <constraint_name>

编辑:此问题中描述了相关问题

  • 谢谢你的建议。不幸的是,没有这样的限制。 (3认同)
  • @SergeyPotapov 这个答案并不能解决你的问题所带来的问题。你能重新审视这个问题并选择[正确答案](/sf/answers/2694206441/)吗? (2认同)

val*_*tis 21

假设您有以下内容:

Indexes:
    "feature_pkey" PRIMARY KEY, btree (id, f_id)
    "feature_unique" UNIQUE, btree (feature, f_class)
    "feature_constraint" UNIQUE CONSTRAINT, btree (feature, f_class)
Run Code Online (Sandbox Code Playgroud)

要删除UNIQUE CONSTRAINT,您将使用ALTER TABLE:

ALTER TABLE feature DROP CONSTRAINT feature_constraint;
Run Code Online (Sandbox Code Playgroud)

要删除PRIMARY KEY,您还可以使用ALTER TABLE:

ALTER TABLE feature DROP CONSTRAINT feature_pkey;
Run Code Online (Sandbox Code Playgroud)

要删除UNIQUE [index],您将使用DROP INDEX:

DROP INDEX feature_unique;
Run Code Online (Sandbox Code Playgroud)

  • 为什么官方文档不能包含这样的例子 (4认同)

dcs*_*ohl 5

我认为这是不可能的...即使在pgAdmin III UI中,如果您尝试编辑使用语句创建的约束,则“唯一”框将显示为灰色。您无法通过用户界面进行更改。结合您对ALTER INDEX文档的研究,我认为这是不可能完成的。