ALTER INDEX — изменение определения индекса
ALTER INDEX [ IF EXISTS ]nameRENAME TOnew_nameALTER INDEX [ IF EXISTS ]nameSET TABLESPACEtablespace_nameALTER INDEXnameATTACH PARTITIONindex_nameALTER INDEXname[ NO ] DEPENDS ON EXTENSIONextension_nameALTER INDEX [ IF EXISTS ]nameSET (storage_parameter[=value] [, ... ] ) ALTER INDEX [ IF EXISTS ]nameRESET (storage_parameter[, ... ] ) ALTER INDEX [ IF EXISTS ]nameALTER [ COLUMN ]column_numberSET STATISTICSintegerALTER INDEX ALL IN TABLESPACEname[ OWNED BYrole_name[, ... ] ] SET TABLESPACEnew_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 index_nameДелает указанный индекс (возможно, с указанием схемы) присоединённым к изменяемому индексу. Указанный индекс должен находиться на секции таблицы, содержащей изменяемый индекс, и иметь эквивалентное определение. Присоединённый индекс не может быть удалён сам по себе и будет автоматически удалён при удалении его родительского индекса.
DEPENDS ON EXTENSION extension_nameNO DEPENDS ON EXTENSION extension_name
Эта форма помечает индекс как зависимый от расширения или, если указано
NO, как больше не зависящий от этого расширения.
Индекс, помеченный как зависимый от расширения, автоматически
удаляется при удалении расширения.
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).
Для получения дополнительной информации об использовании статистики планировщиком запросов
Digital Q.DataBase обратитесь к разделу
Раздел 2.11.2.
IF EXISTSНе выдавать ошибку, если индекс не существует. В этом случае выдаётся уведомление.
column_numberПорядковый номер относится к порядковой (слева направо) позиции столбца индекса.
nameИмя (возможно, с указанием схемы) изменяемого индекса.
new_nameНовое имя для индекса.
tablespace_nameТабличное пространство, в которое будет перемещён индекс.
extension_nameИмя расширения, от которого должен зависеть индекс.
storage_parameterИмя специфичного для метода индексации параметра хранения.
valueНовое значение для специфичного для метода индексации параметра хранения. В зависимости от параметра это может быть число или слово.
Эти операции также возможны с использованием
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 является расширением
Digital Q.DataBase.