Создание уникального индекса, похоже, не удается, но все равно создается? - PullRequest
1 голос
/ 12 февраля 2020

Создаю уникальный (многостолбцовый) индекс, но это не удается, поскольку в таблице уже есть неуникальные строки Тем не менее, индекс все равно создается ...

Это SQL, который я использую:

CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS company_by_code ON public.company USING BTREE("owner","org","code")

, что приводит к следующему ответу от Postgresql:

ERROR:  could not create unique index "company_by_code"
DETAIL:  Key (owner, org, code)=(ABC, DEF, XYZ) is duplicated.
SQL state: 23505

Однако, несмотря на то, что оператор CREATE, похоже, выдавал ошибку, INDEX, похоже, все равно создается.

Так ли это?

1 Ответ

2 голосов
/ 12 февраля 2020

Это задокументировано в руководстве

Если при сканировании таблицы возникает проблема, такая как тупик или нарушение уникальности в уникальном индексе, команда CREATE INDEX потерпит неудачу, но оставит после себя «неверный» индекс. Этот индекс будет игнорироваться для запросов, поскольку он может быть неполным; однако он все равно будет потреблять обновления. Команда psql \d сообщит о таком индексе, как INVALID

Если вы не хотите такого поведения, не используйте CONCURRENTLY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...