ALTER INDEX
Эта страница переведена при помощи нейросети GigaChat.
ALTER INDEX
— изменение определения индекса
Синтаксис
ALTER INDEX [ IF EXISTS ] name RENAME TO new_name
ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_name
ALTER INDEX name ATTACH PARTITION index_name
ALTER INDEX name [ NO ] DEPENDS ON EXTENSION extension_name
ALTER INDEX [ IF EXISTS ] name SET ( storage_parameter [= value] [, ... ] )
ALTER INDEX [ IF EXISTS ] name RESET ( storage_parameter [, ... ] )
ALTER INDEX [ IF EXISTS ] name ALTER [ COLUMN ] column_number
SET STATISTICS integer
ALTER INDEX ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ]
SET TABLESPACE new_tablespace [ NOWAIT ]
Описание
ALTER INDEX
используется для изменения характеристик уже существующего индекса. Команда поддерживает несколько форм, каждая из которых может требовать разного уровня блокировки. Блокировка ACCESS EXCLUSIVE
удерживается, если явно не указано иное. Если используется несколько подкоманд, применяется наибольший из необходимых уровней блокировки.
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 extension_name
NO DEPENDS ON EXTENSION extension_name
- Позволяет обозначить индекс как связанный с расширением или снять такую зависимость. При удалении расширения связанный индекс удаляется автоматически.
SET (storage_parameter [=value] [, ... ])
- Изменяет параметры хранения, характерные для метода индексации. Смотрите CREATE INDEX для получения подробной информации о доступных параметрах. Обратите внимание, что содержимое индекса не будет немедленно изменено этой командой. В зависимости от параметра может понадобиться перестроить индекс с помощью REINDEX, чтобы получить желаемый эффект.
RESET (storage_parameter [, ... ])
- Сбрасывает указанные параметры хранения к значениям по умолчанию. Как и в случае с
SET
, может потребоватьсяREINDEX
, чтобы полностью обновить индекс.
ALTER [COLUMN] column_number SET STATISTICS integer
- Устанавливает уровень детализации сбора статистики для для каждой колонки для последующих операций ANALYZE, хотя может использоваться только для индексных столбцов, которые определены как выражение. Так как выражения не имеют имен, используется номер столбца индекса. Допустимы значения от 0 до 10000, или -1 — для возврата к настройкам по умолчанию (default_statistics_target).
Параметры
IF EXISTS
- Подавляет ошибку, если указанный индекс отсутствует, вместо этого выводится уведомление.
column_number
- Определяет порядковое (слева направо) положение столбца внутри индекса.
name
- Указывает имя существующего индекса, при необходимости дополненное схемой, который должен быть изменен.
new_name
- Указывает новое имя для индекса.
tablespace_name
- Задает табличное пространство, куда будет перемещен индекс.
extension_name
- Указывает имя расширения, от которого будет зависеть индекс.
storage_parameter
- Задает имя параметра хранения, характерного для используемого метода индексации.
value
- Задает новое значение для параметра хранения. Может быть числом или текстовым значением, в зависимости от параметра.
Примечания
Те же изменения, что выполняются через ALTER INDEX
, можно сделать и с помощью команды ALTER TABLE, поскольку ALTER INDEX
является лишь удобной формой вызова подкоманд ALTER TABLE
, применяемых к индексам.
Команда
ALTER INDEX OWNER` больше не оказывает эффекта (будет выдано предупреждение). Индекс не может иметь иного владельца, чем связанная с ним таблица. При смене владельца таблицы соответствующие индексы также получают нового владельца.
Изменение системных индексов, относящихся к каталогам PostgreSQL, не допускается.
Примеры
Переименование существующего индекса:
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.