ОШИБКА: не удалось создать уникальный индекс. ПОДРОБНЕЕ: Ключ (id) = (3105115) дублирован - PullRequest
0 голосов
/ 14 апреля 2020

Я столкнулся с этой проблемой на PostgreSQL, PgAdmin 4. Я пытался изменить одну таблицу.

ALTER TABLE mytable 
ALTER COLUMN some_column type NUMERIC;

Но я продолжаю получать ошибку

ДЕТАЛИ: Ключ ( id) = (3105115) дублируется.

Но когда я выбираю эту таблицу Select count(id) from mytable where id = 3105115, я получаю счет = 1.

Кто-нибудь сталкивался с этой проблемой раньше?

Был бы признателен за любую помощь.

1 Ответ

1 голос
/ 14 апреля 2020

Вероятно, вы столкнулись с повреждением данных.

Попробуйте

REINDEX INDEX mytable_pkey;

или как там будет уникальный индекс. Это, вероятно, приведет к аналогичному сообщению об ошибке.

Вы можете найти записи с дубликатами с:

SET enable_indexscan = off;
SET enable_bitmapscan = off;
SELECT id, count(*)
FROM mytable
GROUP BY id HAVING count(*) > 1;

После удаления этих дубликатов ваша операция должна завершиться успешно.

Как всегда с повреждением данных:

  1. экспортируйте весь кластер и импортируйте его в новый кластер, чтобы избавиться от любого повреждения.

  2. проверьте ваше оборудование

...