【问题标题】:Postgres, duplicate unique indexPostgres,重复唯一索引
【发布时间】:2014-02-16 13:29:29
【问题描述】:

我有一个名为“hash”的唯一索引列

但是当我运行查询时:

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

有两行,由于唯一违规,我无法重新索引该索引。这里发生了什么。我正在使用 PostgreSQL 9.3.2

【问题讨论】:

  • 您100% 确定此唯一索引仅存在于表urls_0的列散列?
  • 拜托,你能连接到数据库,执行以下查询并将结果发布到这里吗? SELECT indexrelid::regclass, indisunique, indisvalid FROM pg_catalog.pg_index WHERE indrelid = 'urls_0'::regclass;
  • @MarceloZabani:我确定
  • @MatheusOl:结果完全正确。但是我已经手动修复了我的系统,删除了重复的行。

标签: postgresql unique-index


【解决方案1】:

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

来自documentation:

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

【讨论】:

  • 我认为这可能是正确的答案,但我不会同时使用 CREATE INDEX。索引是最先创建的。
猜你喜欢
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多