Это дополняет ответ Эрвина выше, но PostgreSQL поддерживает несколько типов индексов. Они, как правило, не являются взаимоисключающими. Вы можете думать о них как о:
- Индексный метод (btree, GiST, GIN и т. Д.). Выберите один, если необходимо (btree по умолчанию)
- Частичное или полное. При частичном использовании предложения where
- Прямой или функциональный. Вы можете индексировать вывод функций.
- Уникальный или не уникальный
Все это можно комбинировать различными способами. Все, что вы делаете здесь, - это использование уникальных и частичных функций, так что вы получаете частичные уникальные индексы (которые, как вы выяснили, чрезвычайно полезны).
Но предположим, что вы хотите иметь нечувствительный к регистру индекс в поле подмножества, где тип равен true. Затем вы бы добавили функциональное определение:
CREATE INDEX my_index_name_idx_u ON tbl (lower(subset)) WHERE type;
Обратите внимание, что это создает уникальный индекс на выходе функции lower (), вызываемой для атрибута subset, где тип - true.