ALTER INDEX — cambiar la definición de un índice
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 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_nameHace 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_nameNO 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.
IF EXISTSNo lanzar un error si el índice no existe. En este caso se emite un aviso (notice).
column_numberEl número ordinal se refiere a la posición ordinal (de izquierda a derecha) de la columna del índice.
nameEl nombre (posiblemente calificado por esquema) de un índice existente a modificar.
new_nameEl nuevo nombre para el índice.
tablespace_nameEl tablespace al que se moverá el índice.
extension_nameEl nombre de la extensión de la que dependerá el índice.
storage_parameterEl nombre de un parámetro de almacenamiento específico del método de indexación.
valueEl 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.
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.
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;
ALTER INDEX es una extensión de
PostgreSQL.