ALTER INDEX
Изменяет определение индекса.
Синтаксис
ALTER INDEX [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER INDEX [ IF EXISTS ] <name> SET TABLESPACE <tablespace_name>
ALTER INDEX [ IF EXISTS ] <name> SET ( <storage_parameter> = <value> [, ...] )
ALTER INDEX [ IF EXISTS ] <name> RESET ( <storage_parameter> [, ...] )
ALTER INDEX ALL IN TABLESPACE <name> [ OWNED BY <role_name> [, ... ] ]
SET TABLESPACE <new_tablespace> [ NOWAIT ]
Описание
ALTER INDEX изменяет определение существующего индекса.
Существует несколько форм:
-
RENAME— эта форма меняет имя индекса. Не влияет на хранимые данные. -
SET TABLESPACE— эта форма меняет табличное пространство индекса на указанное табличное пространство и перемещает файлы данных, связанные с индексом, в новое табличное пространство. Чтобы изменить табличное пространство индекса, необходимо быть владельцем индекса и иметь привилегиюCREATEв новом табличном пространстве. Все индексы в текущей базе данных, находящиеся в табличном пространстве, могут быть перемещены с использованием формыALL IN TABLESPACE, которая заблокирует все индексы для перемещения, а затем переместит каждый из них. Эта форма также поддерживаетOWNED BY, что позволит перемещать только индексы, принадлежащие указанным ролям. Если указана опцияNOWAIT, команда завершится ошибкой, если не сможет немедленно получить все необходимые блокировки. Обратите внимание, что системные каталоги не будут перемещены этой командой, используйтеALTER DATABASEили явные вызовыALTER INDEX, если это необходимо. См. такжеCREATE TABLESPACE. -
SET ( <storage_parameter> = <value> [, … ] )— эта форма изменяет один или несколько специфичных для метода индексирования параметров хранения для индекса. См.CREATE INDEXдля получения подробной информации о доступных параметрах. Обратите внимание, что содержимое индекса не будет изменено немедленно этой командой; в зависимости от параметра вам может потребоваться перестроить индекс с помощьюREINDEX, чтобы получить желаемый эффект. -
RESET ( <storage_parameter> [, … ] )— эта форма сбрасывает один или несколько специфичных для метода индексирования параметров хранения до их значений по умолчанию. Как и в случае сSET, может потребоватьсяREINDEXдля полного обновления индекса.
Параметры
| Параметр | Описание |
|---|---|
IF EXISTS |
Не завершать действие ошибкой, если индекс не существует. В этом случае будет показано уведомление |
name |
Имя (опционально указанное со схемой) существующего индекса для изменения |
new_name |
Новое имя для индекса |
tablespace_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;
Изменить коэффициент заполнения (fill factor) индекса (при условии, что метод индексирования это поддерживает):
ALTER INDEX distributors SET (fillfactor = 75);
REINDEX INDEX distributors;
Совместимость
ALTER INDEX является расширением PostgreSQL.