疑难问题:无法删除唯一约束

7

在 PG 中:

我创建了一个包括唯一邮件地址的用户表,但后来决定邮件地址不应该是唯一的。我推送了更改以使我的电子邮件字段不唯一(我使用 ORM,所以我实际上没有确切的 SQL),但 PG 仍然不允许我使用重复的电子邮件地址。

我检查了索引,它不是唯一的,但有一个约束条件阻止我拥有重复的电子邮件地址。但是,我在删除这个约束条件时遇到了麻烦。我做错了什么?

SQL> ALTER TABLE "users" DROP CONSTRAINT "unique_users_email"
PGError: ERROR:  constraint "unique_users_email" of relation "users" does not exist

SQL> UPDATE users SET email = 'test@test.com'
PGError: ERROR:  duplicate key value violates unique constraint "unique_users_email"
DETAIL:  Key (email)=(test@test.com) already exists.

也许有一个提交更改的地方吗?另外,尝试:ALTER TABLE "users" disable CONSTRAINT "unique_users_email"; - jt234
@jt234 那个没起作用。PGError: ERROR: 语法错误在或靠近“CONSTRAINT”处 第1行:ALTER TABLE "users" disable CONSTRAINT "unique_users_email";我的更改似乎提交得很好,除了这个问题。 - AlexQueue
1
@AlexQueue 请在 psql 中展示 "\d+ users" 的输出;在盲目工作时很难帮助您。这确实听起来像是一个奇怪的情况。您到底使用了哪个ORM?以及使用了什么版本的PostgreSQL? - Craig Ringer
听起来你仍然有一个唯一索引。如Craig所建议的,对表格执行\d命令应该可以显示出来。 - Scott Marlowe
我最终重置了数据库(因为我仍在测试阶段,所以这不是问题)。因此,我无法再次复现这个问题。 - AlexQueue
显示剩余3条评论
1个回答

5
我猜“unique_users_email”实际上是一个唯一索引的名称,而不是约束条件。请尝试:DROP INDEX "unique_users_email";。最近版本的psql应该会在查看表的\d描述时告诉您唯一索引和唯一约束之间的区别。

1
如果表不属于公共模式,请务必指定模式:DROP INDEX myschema.unique_users_email; - buddamus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接