ALTER INDEX
ALTER INDEX — изменить определение индекса
Синтаксис
ALTER INDEX [ IF EXISTS ]имя
RENAME TOновое_имя
ALTER INDEX [ IF EXISTS ]имя
SET TABLESPACEтабл_пространство
ALTER INDEXимя
DEPENDS ON EXTENSIONимя_расширения
ALTER INDEX [ IF EXISTS ]имя
SET (параметр_хранения
[=значение
] [, ... ] ) ALTER INDEX [ IF EXISTS ]имя
RESET (параметр_хранения
[, ... ] ) ALTER INDEX ALL IN TABLESPACEимя
[ OWNED BYимя_роли
[, ... ] ] SET TABLESPACEновое_табл_пространство
[ NOWAIT ]
Описание
ALTER INDEX
меняет определение существующего индекса. Эта команда имеет несколько разновидностей:
RENAME
Форма
RENAME
меняет имя индекса. На сохранённые данные это не влияет.SET TABLESPACE
Эта форма меняет табличное пространство индекса на заданное и переносит в него файл(ы) данных, связанные с индексом. Для изменения табличного пространства индекса нужно быть владельцем индекса и иметь право
CREATE
в новом табличном пространстве. ФормаALL IN TABLESPACE
позволяет перенести из заданного пространства все индексы в текущей базе данных, блокируя их для перемещения и затем перемещая каждый индекс. Эта форма также поддерживает указаниеOWNED BY
, с которым будут перемещены только индексы, принадлежащие заданным ролям. Если указан параметрNOWAIT
, команда завершится ошибкой, если не сможет немедленно получить все требуемые блокировки. Заметьте, что эта команда не переместит системные каталоги; вместо неё следует использоватьALTER DATABASE
или явные вызовыALTER INDEX
. См. также CREATE TABLESPACE.DEPENDS ON EXTENSION
Эта форма помечает индекс как зависимый от расширения, так что при удалении расширения будет автоматически удалён и индекс.
SET (
параметр_хранения
[=значение
] [, ... ] )Эта форма настраивает один или несколько специфичных для индекса параметров хранения. Список доступных параметров приведён в CREATE INDEX. Заметьте, что эта команда не меняет содержимое индекса немедленно; для получения желаемого эффекта в зависимости от параметров может потребоваться перестроить индекс командой REINDEX.
RESET (
параметр_хранения
[, ... ] )Эта форма сбрасывает один или несколько специфичных для индекса параметров хранения к значениям по умолчанию. Как и с
SET
, для полного обновления индекса может потребоваться выполнитьREINDEX
.
Параметры
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;
Совместимость
ALTER INDEX
является расширением PostgreSQL.