2014-02-16 73 views
1

我有一个唯一的索引列命名为“哈希”Postgres的,重复的唯一索引

然而,当我运行查询:

SELECT * 
FROM urls_0 
WHERE hash = '\x0009cb31d8a6c0c64f6877c22a781804'::bytea 

有两行,我不能重新索引,因为独特的违规指数。这里发生了什么。我正在使用PostgreSQL 9.3.2

+0

您是** 100%肯定**该*唯一*索引仅存在于名为* hash *的列* urls_0 *中? –

+0

请问您能否连接到数据库,执行以下查询并在此处发布结果? 'SELECT indexrelid :: regclass,indisunique,indisvalid FROM pg_catalog.pg_index WHERE indrelid ='urls_0':: regclass;' – MatheusOl

+0

@MarceloZabani:我确定 –

回答

2

如果您使用CREATE INDEX CONCURRENTLY子句,可能会发生这种情况。

documentation

如果在扫描表,如唯一性冲突的唯一索引出现问题,CREATE INDEX命令会失败,但留下一个“非法”索引。为了查询目的,该索引将被忽略,因为它可能不完整;但是它仍然会消耗更新开销。

+0

我认为这可能是正确的答案,但我不同时使用CREATE INDEX。该索引是首先创建的。 –

相关问题