ALTER INDEX#

ALTER INDEX

ALTER INDEX

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

Синтаксис

ALTER INDEX [ IF EXISTS ] name RENAME TO new_name
ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_name
ALTER INDEX name ATTACH PARTITION index_name
ALTER INDEX name [ NO ] DEPENDS ON EXTENSION extension_name
ALTER INDEX [ IF EXISTS ] name SET ( storage_parameter [= value] [, ... ] )
ALTER INDEX [ IF EXISTS ] name RESET ( storage_parameter [, ... ] )
ALTER INDEX [ IF EXISTS ] name ALTER [ COLUMN ] column_number
    SET STATISTICS integer
ALTER INDEX ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ]
    SET TABLESPACE new_tablespace [ NOWAIT ]

Описание

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

RENAME

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

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

SET TABLESPACE

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

ATTACH PARTITION

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

DEPENDS ON EXTENSION extension_name
NO DEPENDS ON EXTENSION extension_name

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

SET ( storage_parameter [= value] [, ... ] )

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

RESET ( storage_parameter [, ... ] )

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

ALTER [ COLUMN ] column_number SET STATISTICS integer

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

Параметры

IF EXISTS

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

column_number

Порядковый номер относится к порядковой (слева направо) позиции столбца индекса.

name

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

new_name

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

tablespace_name

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

extension_name

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

storage_parameter

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

value

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

Примечания

Эти операции также можно выполнить с помощью 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 - это расширение Tantor SE.

См. также

CREATE INDEX, REINDEX