11.6. Уникальные индексы

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

CREATE UNIQUE INDEX имя ON таблица (колонка [, ...]);

В настоящее время уникальными могут быть только индексы-B-деревья.

Если индекс создаётся как уникальный, в таблицу нельзя будет добавить несколько строк с одинаковыми значениями ключа индекса. При этом значения NULL считаются не равными друг другу. Составной уникальный индекс не принимает только те строки, в которых все индексируемые колонки содержат одинаковые значения.

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

Замечание: Добавлять в таблицу ограничения уникальности рекомендуется командой ALTER TABLE ... ADD CONSTRAINT. При этом индексы, применяемые для обеспечения уникальности, можно считать тонкостями реализации и обращаться к ним напрямую не следует. Однако следует понимать, что для уникальной колонки не нужно вручную создавать отдельный индекс — он просто продублирует индекс, созданный автоматически.