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