| Документация по PostgreSQL 9.4.1 | |||
|---|---|---|---|
| Пред. | Уровень выше | Глава 11. Индексы | След. |
11.6. Уникальные индексы
Индексы также могут обеспечивать уникальность значения в колонке или уникальность сочетания значений в нескольких колонках.
CREATE UNIQUE INDEX имя ON таблица (колонка [, ...]);В настоящее время уникальными могут быть только индексы-B-деревья.
Если индекс создаётся как уникальный, в таблицу нельзя будет добавить несколько строк с одинаковыми значениями ключа индекса. При этом значения NULL считаются не равными друг другу. Составной уникальный индекс не принимает только те строки, в которых все индексируемые колонки содержат одинаковые значения.
Когда для таблицы определяется ограничение уникальности или первичный ключ, PostgreSQL автоматически создаёт уникальный индекс по всем колонкам, составляющим это ограничение или первичный ключ (индекс может быть составным). Такой индекс и является механизмом, который обеспечивает выполнение ограничения.
Замечание: Добавлять в таблицу ограничения уникальности рекомендуется командой ALTER TABLE ... ADD CONSTRAINT. При этом индексы, применяемые для обеспечения уникальности, можно считать тонкостями реализации и обращаться к ним напрямую не следует. Однако следует понимать, что для уникальной колонки не нужно вручную создавать отдельный индекс — он просто продублирует индекс, созданный автоматически.
| Пред. | Начало | След. |
| Объединение нескольких индексов | Уровень выше | Индексы по выражениям |
| PostgreSQL 9.4.1 Documentation | |||
|---|---|---|---|
| Prev | Up | Chapter 11. Indexes | Next |
11.6. Unique Indexes
Indexes can also be used to enforce uniqueness of a column's value, or the uniqueness of the combined values of more than one column.
CREATE UNIQUE INDEX name ON table (column [, ...]);Currently, only B-tree indexes can be declared unique.
When an index is declared unique, multiple table rows with equal indexed values are not allowed. Null values are not considered equal. A multicolumn unique index will only reject cases where all indexed columns are equal in multiple rows.
PostgreSQL automatically creates a unique index when a unique constraint or primary key is defined for a table. The index covers the columns that make up the primary key or unique constraint (a multicolumn index, if appropriate), and is the mechanism that enforces the constraint.
Note: The preferred way to add a unique constraint to a table is ALTER TABLE ... ADD CONSTRAINT. The use of indexes to enforce unique constraints could be considered an implementation detail that should not be accessed directly. One should, however, be aware that there's no need to manually create indexes on unique columns; doing so would just duplicate the automatically-created index.