Це доповнює відповідь Ервіна вище, але PostgreSQL підтримує купу типів індексів. Вони взагалі не є взаємовиключними. Ви можете думати про це як таке:
- Індексний метод (btree, GiST, GIN тощо). Виберіть його, якщо потрібно (btree є типовим)
- Часткове або повне. Якщо частково використовувати пункт де
- Прямий або функціональний. Ви можете проіндексувати вихід функцій.
- Унікальний або не унікальний
Всі вони можуть поєднуватися різними способами. Все, що ви робите тут, - це використовувати унікальні та часткові функції, так що ви отримуєте часткові унікальні індекси (що надзвичайно корисно, як ви дізнаєтесь.
Але припустимо, що ви хочете мати нечутливий до регістру індекс у полі підмножини, де тип true. Тоді ви б додали функціональне визначення:
CREATE INDEX my_index_name_idx_u ON tbl (lower(subset)) WHERE type;
Зауважте, це створює унікальний індекс на виході функції нижчого (), викликаного атрибутом підмножини, де тип є істинним.