ALTER INDEX

ALTER INDEX — cambiar la definición de un índice

Synopsis

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 ]

Descripción

ALTER INDEX cambia la definición de un índice existente. A continuación se describen varias variantes. Ten en cuenta que el nivel de bloqueo requerido puede diferir para cada variante. Se mantiene un bloqueo ACCESS EXCLUSIVE a menos que se indique explícitamente lo contrario. Cuando se listan múltiples subcomandos, el bloqueo mantenido será el más estricto requerido por cualquiera de los subcomandos.

RENAME

La forma RENAME cambia el nombre del índice. Si el índice está asociado con una restricción de tabla (ya sea UNIQUE, PRIMARY KEY o EXCLUDE), la restricción también se renombrará. No hay efecto sobre los datos almacenados.

Renombrar un índice adquiere un bloqueo SHARE UPDATE EXCLUSIVE.

SET TABLESPACE

Esta forma cambia el tablespace del índice al tablespace especificado y mueve los archivos de datos asociados con el índice al nuevo tablespace. Para cambiar el tablespace de un índice, debes ser propietario del índice y tener el privilegio CREATE en el nuevo tablespace. Todos los índices de la base de datos actual en un tablespace se pueden mover utilizando la forma ALL IN TABLESPACE, la cual bloqueará todos los índices a mover y luego moverá cada uno. Esta forma también admite OWNED BY, que solo moverá los índices propiedad de los roles especificados. Si se especifica la opción NOWAIT, el comando fallará si no puede adquirir todos los bloqueos necesarios de inmediato. Ten en cuenta que los catálogos del sistema no se moverán con este comando; usa ALTER DATABASE o invocaciones explícitas de ALTER INDEX en su lugar si lo deseas. Consulta también CREATE TABLESPACE.

ATTACH PARTITION index_name

Hace que el índice nombrado (posiblemente calificado por esquema) se asocie (attach) al índice modificado. El índice nombrado debe estar en una partición de la tabla que contiene el índice que se está modificando, y debe tener una definición equivalente. Un índice asociado no se puede eliminar por sí mismo y se eliminará automáticamente si se elimina su índice padre.

Si el índice nombrado ya está asociado al índice modificado, el comando intentará validar el índice padre si este es inválido actualmente.

DEPENDS ON EXTENSION extension_name
NO DEPENDS ON EXTENSION extension_name

Esta forma marca el índice como dependiente de la extensión, o ya no dependiente de esa extensión si se especifica NO. Un índice marcado como dependiente de una extensión se elimina automáticamente cuando se elimina la extensión.

SET ( storage_parameter [= value] [, ... ] )

Esta forma cambia uno o más parámetros de almacenamiento específicos del método de indexación para el índice. Consulta CREATE INDEX para obtener detalles sobre los parámetros disponibles. Ten en cuenta que el contenido del índice no se modificará de inmediato con este comando; dependiendo del parámetro, es posible que debas reconstruir el índice con REINDEX para obtener los efectos deseados.

RESET ( storage_parameter [, ... ] )

Esta forma restablece uno o más parámetros de almacenamiento específicos del método de indexación a sus valores predeterminados. Al igual que con SET, podría ser necesario un REINDEX para actualizar el índice por completo.

ALTER [ COLUMN ] column_number SET STATISTICS integer

Esta forma establece el objetivo de recopilación de estadísticas por columna para operaciones ANALYZE posteriores, aunque solo se puede usar en columnas de índice que estén definidas como una expresión. Dado que las expresiones carecen de un nombre único, nos referimos a ellas utilizando el número ordinal de la columna del índice. El objetivo se puede establecer en el rango de 0 a 10000; alternativamente, establécelo en -1 para volver a utilizar el objetivo de estadísticas predeterminado del sistema (default_statistics_target). Para obtener más información sobre el uso de estadísticas por parte del planificador de consultas de PostgreSQL, consulta la Section 14.2.

Parámetros

IF EXISTS

No lanzar un error si el índice no existe. En este caso se emite un aviso (notice).

column_number

El número ordinal se refiere a la posición ordinal (de izquierda a derecha) de la columna del índice.

name

El nombre (posiblemente calificado por esquema) de un índice existente a modificar.

new_name

El nuevo nombre para el índice.

tablespace_name

El tablespace al que se moverá el índice.

extension_name

El nombre de la extensión de la que dependerá el índice.

storage_parameter

El nombre de un parámetro de almacenamiento específico del método de indexación.

value

El nuevo valor para un parámetro de almacenamiento específico del método de indexación. Esto puede ser un número o una palabra, según el parámetro.

Notas

Estas operaciones también son posibles utilizando ALTER TABLE. ALTER INDEX es, de hecho, solo un alias para las formas de ALTER TABLE que se aplican a los índices.

Anteriormente existía una variante ALTER INDEX OWNER, pero ahora se ignora (con una advertencia). Un índice no puede tener un propietario diferente al propietario de su tabla. Al cambiar el propietario de la tabla, también se cambia automáticamente el del índice.

No está permitido cambiar ninguna parte de un índice de catálogo del sistema.

Ejemplos

Para renombrar un índice existente:

ALTER INDEX distributors RENAME TO suppliers;

Para mover un índice a un tablespace diferente:

ALTER INDEX distributors SET TABLESPACE fasttablespace;

Para cambiar el factor de relleno (fill factor) de un índice (asumiendo que el método de indexación lo admite):

ALTER INDEX distributors SET (fillfactor = 75);
REINDEX INDEX distributors;

Establecer el objetivo de recopilación de estadísticas para un índice de expresión:

CREATE INDEX coord_idx ON measured (x, y, (z + t));
ALTER INDEX coord_idx ALTER COLUMN 3 SET STATISTICS 1000;

Compatibilidad

ALTER INDEX es una extensión de PostgreSQL.

Véase también

CREATE INDEX, REINDEX