ALTER INDEX
ALTER INDEX — изменить определение индекса
Синтаксис
ALTER INDEX [ IF EXISTS ]имяRENAME TOновое_имяALTER INDEX [ IF EXISTS ]имяSET TABLESPACEтабл_пространствоALTER INDEXимяATTACH PARTITIONимя_индексаALTER INDEXимя[ NO ] DEPENDS ON EXTENSIONимя_расширенияALTER INDEX [ IF EXISTS ]имяSET (параметр_хранения[=значение] [, ... ] ) ALTER INDEX [ IF EXISTS ]имяRESET (параметр_хранения[, ... ] ) ALTER INDEX [ IF EXISTS ]имяALTER [ COLUMN ]номер_столбцаSET STATISTICSintegerALTER INDEX ALL IN TABLESPACEимя[ OWNED BYимя_роли[, ... ] ] SET TABLESPACEновое_табл_пространство[ NOWAIT ]
Описание
ALTER INDEX меняет определение существующего индекса. Несколько её разновидностей описаны ниже. Заметьте, что для разных разновидностей могут требоваться разные уровни блокировок. Если явно не отмечено другое, требуется блокировка ACCESS EXCLUSIVE. При перечислении нескольких подкоманд будет запрашиваться самая сильная блокировка из требуемых ими.
RENAMEФорма
RENAMEменяет имя индекса. Если этот индекс связан с ограничением таблицы (UNIQUE,PRIMARY KEYилиEXCLUDE), это ограничение тоже переименовывается. На сохранённые данные это не влияет.Для переименования индекса требуется блокировка
SHARE UPDATE EXCLUSIVE.SET TABLESPACEЭта форма меняет табличное пространство индекса на заданное и переносит в него файл(ы) данных, связанные с индексом. Для изменения табличного пространства индекса нужно быть владельцем индекса и иметь право
CREATEв новом табличном пространстве. ФормаALL IN TABLESPACEпозволяет перенести из заданного пространства все индексы в текущей базе данных, блокируя их для перемещения и затем перемещая каждый индекс. Эта форма также поддерживает указаниеOWNED BY, с которым будут перемещены только индексы, принадлежащие заданным ролям. Если указан параметрNOWAIT, команда завершится ошибкой, если не сможет немедленно получить все требуемые блокировки. Заметьте, что эта команда не переместит системные каталоги; вместо неё следует использоватьALTER DATABASEили явные вызовыALTER INDEX. См. также описаниеCREATE TABLESPACE.ATTACH PARTITIONимя_индексаЭта форма присоединяет указанный индекс (возможно, дополненный схемой) к изменяемому. Указанный индекс должен относиться к секции таблицы, содержащей изменяемый индекс, и иметь такое же определение. Присоединённый индекс не может быть удалён независимо, но будет удалён автоматически при удалении родительского индекса.
DEPENDS ON EXTENSIONимя_расширенияNO DEPENDS ON EXTENSIONимя_расширенияЭта форма делает индекс зависимым от расширения или, наоборот, удаляет эту зависимость, если указывается
NO. Индекс, помеченный как зависимый от расширения, автоматически удаляется при удалении расширения.SET (параметр_хранения[=значение] [, ... ] )Эта форма настраивает один или несколько специфичных для индекса параметров хранения. Список доступных параметров приведён в описании
CREATE INDEX. Заметьте, что эта команда не меняет содержимое индекса немедленно; для получения желаемого эффекта в зависимости от параметров может потребоваться перестроить индекс командойREINDEX.RESET (параметр_хранения[, ... ] )Эта форма сбрасывает один или несколько специфичных для индекса параметров хранения к значениям по умолчанию. Как и с
SET, для полного обновления индекса может потребоваться выполнитьREINDEX.ALTER [ COLUMN ]номер_столбцаSET STATISTICSintegerЭта форма задаёт ориентир сбора статистики по столбцу для последующих операций
ANALYZE, хотя её можно использовать только для индексируемых столбцов, заданных в виде выражений. Так как у выражений нет уникальных имён, мы обращаемся к ним по порядковым номерам столбцов в индексе. Диапазон допустимых значений ориентира: 0..10000; при -1 применяется системное значение по умолчанию (default_statistics_target). За дополнительными сведениями об использовании статистики планировщиком запросов Postgres Pro обратитесь к Разделу 14.2.
Параметры
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;
Устанавливает ориентир сбора статистики для индекса по выражению:
CREATE INDEX coord_idx ON measured (x, y, (z + t)); ALTER INDEX coord_idx ALTER COLUMN 3 SET STATISTICS 1000;
Совместимость
ALTER INDEX является расширением Postgres Pro.