ALTER INDEX

ALTER INDEX — изменить определение индекса


Синтаксис

ALTER INDEX [ IF EXISTS ] имя RENAME TO новое_имя
ALTER INDEX [ IF EXISTS ] имя SET TABLESPACE имя_табличного_пространства
ALTER INDEX имя ATTACH PARTITION имя_индекса
ALTER INDEX имя DEPENDS ON EXTENSION имя_расширения
ALTER INDEX [ IF EXISTS ] имя SET ( параметр_хранения = значение [, ... ] )
ALTER INDEX [ IF EXISTS ] имя RESET ( параметр_хранения [, ... ] )
ALTER INDEX [ IF EXISTS ] имя ALTER [ COLUMN ] номер_столбца
    SET STATISTICS целое_число
ALTER INDEX ALL IN TABLESPACE имя [ OWNED BY имя_роли [, ... ] ]
    SET TABLESPACE новое_табличное_пространство [ NOWAIT ]

Описание

Команда ALTER INDEX изменяет определение существующего индекса. Она имеет несколько форм, которые описаны ниже. Обратите внимание, что требуемый уровень блокировки может отличаться для каждой формы. Если явно не указано, то по умолчанию запрашивается блокировка ACCESS EXCLUSIVE. Если перечислено несколько подкоманд, то запрашивается самая строгая блокировка из требуемых подкомандами.

RENAME

Форма RENAME изменяет имя индекса. Если индекс связан с ограничением таблицы (UNIQUE, PRIMARY KEY или EXCLUDE), то ограничение также переименовывается. Это не оказывает никакого влияния на сохраненные данные.

Переименование индекса требует блокировки SHARE UPDATE EXCLUSIVE.

SET TABLESPACE

Эта форма изменяет табличное пространство индекса на указанное и перемещает файл (или файлы) данных, связанный с индексом, в новое табличное пространство. Чтобы изменить табличное пространство индекса, текущий пользователь должен быть владельцем индекса и иметь право CREATE в новом табличном пространстве. Все индексы в текущей базе данных в табличном пространстве можно переместить с помощью формы ALL IN TABLESPACE. При этом индексы блокируются для перемещения, а затем перемещается каждый индекс. Эта форма также поддерживает OWNED BY, с которым будут перемещены только индексы, принадлежащие заданным ролям. Если указан параметр NOWAIT, то команда завершится ошибкой, если не сможет сразу получить все необходимые блокировки. Обратите внимание, что системные каталоги этой командой перемещены не будут; при необходимости используйте вызов ALTER DATABASE или явный вызов ALTER INDEX. См. также CREATE TABLESPACE.

ATTACH PARTITION

Эта форма присоединяет указанный индекс к изменяемому. Указанный индекс должен находиться в партиции таблицы, содержащей изменяемый индекс, и иметь аналогичное определение. Присоединенный индекс не может быть удален сам по себе и будет автоматически удален при удалении родительского индекса.

DEPENDS ON EXTENSION имя_расширения
NO DEPENDS ON EXTENSION имя_расширения

Эта форма помечает индекс как зависящий или, если указано NO, как более не зависящий от данного расширения. Индекс, помеченный как зависящий от расширения, при его удалении также будет автоматически удален.

SET ( параметр_хранения = значение [, ... ] )

Эта форма изменяет один или несколько специфичных для индексного метода параметров хранения. Дополнительную информацию о доступных параметрах см. на справочной странице команды CREATE INDEX. Обратите внимание, что содержимое индекса не будет изменено немедленно; в зависимости от параметров, для получения желаемого эффекта может потребоваться перестроить индекс командой REINDEX.

RESET ( параметр_хранения [, ... ] )

Эта форма сбрасывает один или несколько специфичных для индексного метода параметров хранения к значениям по умолчанию. Как и в случае с SET, для полного обновления индекса может потребоваться выполнить REINDEX.

ALTER [ COLUMN ] номер_столбца SET STATISTICS целое_число

Эта форма задает целевой показатель сбора статистики по столбцу для последующих операций ANALYZE, хотя ее можно использовать только для индексируемых столбцов, определенных как выражение. Поскольку выражения не имеют уникального имени, к ним нужно обращаться по порядковому номеру столбца в индексе. Целевой показатель можно задать в диапазоне от 0 до 10000; как вариант, при установке -1 применяется его системное значение по умолчанию (default_statistics_target). Дополнительную информацию об использовании статистики планировщиком запросов QHB см. в разделе Статистика, используемая планировщиком.


Параметры

IF EXISTS

Не считать ошибкой, если индекс не существует. В этом случае выдается только замечание.

номер_столбца

Число, указывающее на порядковый номер столбца в индексе (слева направо).

имя

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

новое_имя

Новое имя индекса.

имя_табличного_пространства

Табличное пространство, в которое будет перемещен индекс.

имя_расширения

Имя расширения, от которого будет зависеть индекс.

параметр_хранения

Имя специфичного для индексного метода параметра хранения.

значение

Новое значение специфичного для индексного метода параметра хранения. Это может быть число или слово, в зависимости от параметра.


Примечания

Эти операции также можно выполнить с помощью команды [ALTER TABLE]. ALTER INDEX фактически является просто синонимом форм команды ALTER TABLE, которые применяются к индексам.

Ранее существовала форма ALTER INDEX OWNER, но теперь она игнорируется (с предупреждением). Владелец индекса должен быть и владельцем таблицы. Смена владельца таблицы автоматически меняет владельца индекса.

Изменение любой части индекса системного каталога не допускается.


Примеры

Переименование существующего индекса:

ALTER INDEX distributors RENAME TO suppliers;

Перемещение индекса в другое табличное пространство:

ALTER INDEX distributors SET TABLESPACE fasttablespace;

Изменение коэффициента заполнения индекса (предполагается, что индексный метод его поддерживает):

ALTER INDEX distributors SET (fillfactor = 75);
REINDEX INDEX distributors;

Установка целевого показателя статистики для индекса по выражению:

CREATE INDEX coord_idx ON measured (x, y, (z + t));
ALTER INDEX coord_idx ALTER COLUMN 3 SET STATISTICS 1000;

Совместимость

Команда ALTER INDEX является расширением QHB.


См. также

CREATE INDEX, REINDEX