Перейти к содержимому

CREATE INDEX

CREATE INDEX добавляет обслуживаемую структуру доступа к таблице.

CREATE [UNIQUE] INDEX [IF NOT EXISTS] index_name
ON table_name (column_name [operator_class] [, ...])
[USING { BTREE | HASH | BITMAP | HNSW }]
[WITH (option = expression [, ...])]
[WHERE condition]

BTREE, HASH и BITMAP являются проверенными обычными методами. Список из нескольких столбцов создаёт составной индекс. UNIQUE обеспечивает уникальность индексируемых не-NULL ключей, а WHERE включает лишь строки с истинным локальным условием.

index_name идентифицирует объект каталога. column_name перечисляет хранимые ключи по порядку. operator_class выбирает видимый built-in или extension-bound contract key и strategy для этого столбца. USING выбирает метод; без него выбор делает движок. WITH в основном предназначен для параметров конкретного метода.

Успех возвращает командный результат без строк. SHOW INDEXES показывает сохранённое определение; выбор планировщика проверяется через EXPLAIN.

Создание индекса транзакционно и публикуется вместе с поколением каталога таблицы при COMMIT.

Повтор активного UNIQUE-ключа отклоняется. Частичное условие должно быть детерминированным и локальным для строки. Частичные HNSW-индексы отклоняются. IF NOT EXISTS подавляет только идентичное определение; иное под тем же именем завершается ошибкой. Operator class должен соответствовать типу столбца и выбранному access method.

Эффективный Principal должен владеть целевой таблицей; сессии также нужен CONNECT. Индекс получает совместимое владение в каталоге.

CREATE TABLE ref_create_index (id INTEGER PRIMARY KEY, email TEXT, active BOOLEAN);
CREATE UNIQUE INDEX ref_email_active_idx
ON ref_create_index (email) USING HASH WHERE active = true;
SHOW INDEXES FROM ref_create_index;

См. Индексы, Команды native extensions, ALTER INDEX и SHOW.