ALTER INDEX#
ALTER INDEX
ALTER INDEX — изменить определение индекса
Синтаксис
ALTER INDEX [ IF EXISTS ]name
RENAME TOnew_name
ALTER INDEX [ IF EXISTS ]name
SET TABLESPACEtablespace_name
ALTER INDEXname
ATTACH PARTITIONindex_name
ALTER INDEXname
[ NO ] DEPENDS ON EXTENSIONextension_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 STATISTICSinteger
ALTER INDEX ALL IN TABLESPACEname
[ OWNED BYrole_name
[, ... ] ] SET TABLESPACEnew_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
index_name
Заставляет указанный индекс (возможно, с указанием схемы) стать прикрепленным к изменяемому индексу. Указанный индекс должен находиться на разделе таблицы, содержащей изменяемый индекс, и иметь эквивалентное определение. Прикрепленный индекс не может быть удален самостоятельно и будет автоматически удален, если его родительский индекс будет удален.
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 STATISTICSinteger
Эта форма устанавливает цель сбора статистики для каждого столбца для последующих операций
ANALYZE
, но может использоваться только для индексных столбцов, определенных как выражение. Поскольку выражения не имеют уникального имени, мы обращаемся к ним с помощью порядкового номера индексного столбца. Цель может быть установлена в диапазоне от 0 до 10000; альтернативно, установите ее в -1, чтобы вернуться к использованию системной цели статистики по умолчанию (default_statistics_target). Для получения дополнительной информации о использовании статистики планировщиком запросов Tantor BE см. Раздел 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 BE.