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