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 STATISTICSinteger
ALTER 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). За дополнительными сведениями об использовании статистики планировщиком запросов PostgreSQL обратитесь к Разделу 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
является расширением PostgreSQL.