Разве Postgres не использует уникальные индексы для ограничения уникального ключа? - PullRequest
0 голосов
/ 02 января 2019

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

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

Как показал эксперимент, в результате я получил два индекса с одинаковым определением:

CREATE UNIQUE INDEX agent_ux ON agent (branch_id, initials);
ALTER TABLE agent ADD CONSTRAINT agent_uk UNIQUE (branch_id, initials);

select indexname from pg_indexes where tablename = 'agent';
agent_ux
agent_uk

DoesnPostgres повторно использует уникальные индексы для ограничения уникального ключа?

ПРИМЕЧАНИЕ Я не могу удалить индекс, соответствующий уникальному ограничению (ошибка говорит о связанном ограничении), но индекс автоматически удаляется, если яудалить ограничение.

1 Ответ

0 голосов
/ 02 января 2019

В postgres при создании ограничения UNIQUE автоматически создается индекс. Вы также можете создать ограничение, продвигая существующий индекс, используя синтаксис ALTER TABLE ttt add constraint ccc USING xxx: Документация


ALTER TABLE agent
   ADD CONSTRAINT agent_uk UNIQUE USING agent_ux;

[непроверенный]

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