2014-02-16 70 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。該索引是首先創建的。 –

相關問題