2014-02-16 2 views
1

У меня есть уникальный индекс столбца с именем «хэш»Postgres, продублировать уникальный индекс

Однако при запуске запроса:

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

Есть две строки, и я не могу переиндексации, что индекс из-за уникального нарушения , Что здесь происходит. Я использую PostgreSQL 9.3.2

+0

Вы ** 100% уверены **, что этот * уникальный * индекс существует для таблицы * urls_0 * исключительно в столбце с именем * hash *? –

+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

Я думаю, может быть, это правильный ответ, но я НЕ СОКРАЩАЮ Индекс создается очень первым. –

Смежные вопросы