删除PostgreSQL中索引的唯一性

时间:2013-08-29 15:13:18

标签: sql database postgresql

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

CREATE UNIQUE INDEX my_index ON my_table USING btree (my_column)

有没有办法改变索引以删除唯一约束?我看上去很ALTER INDEX documentation,但它似乎没有做我需要的。

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

6 个答案:

答案 0 :(得分:70)

您可以删除唯一的CONSTRAINT,而不是INDEX本身。

通过CONSTRAINTS

检查select * from information_schema.table_constraints;

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

ALTER TABLE "my_table" DROP CONSTRAINT "unique_something"

修改:this question

中描述了相关问题

答案 1 :(得分:16)

假设您有以下内容:

ALTER TABLE feature DROP CONSTRAINT feature_pkey;

要删除UNIQUE CONSTRAINT,您可以使用ALTER TABLE

DROP INDEX feature_unique;

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

s3

要删除UNIQUE [index],您可以使用DROP INDEX

s3

答案 2 :(得分:5)

我认为这不可能......即使在pgAdmin III UI中,如果您尝试编辑使用语句创建的约束,“Unique”框也会显示为灰色;你无法通过UI更改它。结合您对ALTER INDEX文档的研究,我认为无法完成。

答案 3 :(得分:0)

在相同的问题上搜索了几个小时,似乎没有找到正确的答案-所有给出的答案都无法正常工作。

对于非空值,我还花了一些时间来查找。显然由于某些原因,多数认证代码在我使用时不起作用。

我得到的不是非空版本代码,类似这样

ALTER TABLE tablename
ALTER COLUMN column_want_to_remove_constriant
DROP NOT NULL

将'not null'更改为'unique'无效。

答案 4 :(得分:0)

如果您已安装PgAdmin4,则非常简单,只需执行以下步骤...

  1. 转到表属性(右键单击表并选择属性)。
  2. 将打开一个窗口,然后导航到属性窗口中的约束
  3. 约束选项中,您将看到以下屏幕截图所示的选项,只需转到 Unique ,您将看到具有唯一约束的列。单击删除按钮并保存。就是这样,你很好。 enter image description here

答案 5 :(得分:0)

这对我有用,不需要指定表,因为索引在您的情况下是唯一的:

DROP INDEX if exists my_index_name;