无法在postgres中创建唯一索引,它表示"密钥是重复的",即使它不是

Mat*_*ari 5 postgresql

我为表创建了一个唯一索引,并出现以下错误:

SQL error: ERROR: could not create unique index "unique_product" DETAIL: Key (mastercode)=() is duplicated
Run Code Online (Sandbox Code Playgroud)

所以我运行一个查询来检查重复的记录,并确实发现了一些重复:

select * from product p where (select count(*) from product pp where pp.mastercode = p.mastercode) > 1
Run Code Online (Sandbox Code Playgroud)

但即使删除它们后我无法创建索引,它也显示相同的错误,并且检查重复项的查询没有显示任何内容.

看起来它在删除重复项之后没有更新索引,或类似的东西.我怎么解决这个问题?

更新 我忘记提及的东西,但可能很重要,我已经在该字段上有一个索引mastercode,这是一个默认索引(不是唯一的).不知道这是否有事可做.

Fra*_*ens 8

检查此查询的结果:

SELECT  mastercode, count(*)
FROM product
GROUP BY mastercode
HAVING count(*) > 1; -- not unique
Run Code Online (Sandbox Code Playgroud)


Tom*_*dee 1

我相信您有一个空主代码的实例,并且正在尝试插入另一个空主代码。

尝试select * from product where mastercode is null;

  • 啊,什么?两个“NULL”值不相等,并且在“UNIQUE”索引中不冲突。 (3认同)