繁体   English   中英

删除PostgreSQL中索引的唯一性

[英]Remove uniqueness of index in PostgreSQL

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

CREATE UNIQUE INDEX <my_index> ON <my_table> USING btree (my_column)

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

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

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

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

然后,如果你找到一个,你应该可以像这样删除它:

ALTER TABLE <my_table> DROP CONSTRAINT <constraint_name>

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

假设您有以下内容:

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

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

ALTER TABLE feature DROP CONSTRAINT feature_constraint;

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

ALTER TABLE feature DROP CONSTRAINT feature_pkey;

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

DROP INDEX feature_unique;

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

为同一个问题搜索了几个小时,似乎没有得到正确的答案——所有给出的答案都没有奏效。

对于not null,我也花了一些时间才找到。 显然,出于某种原因,多数人认证的代码在我使用时不起作用。

我得到了非空版本代码,就像这样

ALTER TABLE tablename
ALTER COLUMN column_want_to_remove_constriant
DROP NOT NULL

可悲的是,将“not null”更改为“unique”是行不通的。

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

DROP INDEX if exists my_index_name;

如果您安装了 PgAdmin4,则非常简单,只需按照以下步骤操作...

  1. 转到表属性(右键单击表并选择属性)。
  2. 将打开一个窗口,然后导航到属性窗口中的约束
  3. 约束选项中,您将看到如下屏幕截图所示的选项,只需转到唯一,您将看到具有唯一约束的列。 单击删除按钮并保存。 那你就可以走了。 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM