Перейти к основному содержимому

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.

Смотрите также

CREATE INDEX, РREINDEX