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 является расширением Postgres Pro.