ALTER INDEX

ALTER INDEX — modifica a definição de um índice

Sinopse

ALTER INDEX [ IF EXISTS ] nome_do_índice​
    RENAME TO novo_nome
ALTER INDEX [ IF EXISTS ] nome_do_índice​
    SET TABLESPACE nome_do_espaço_de_tabelas
ALTER INDEX nome_do_índice​
    ATTACH PARTITION nome_do_índice
ALTER INDEX nome_do_índice​
    [ NO ] DEPENDS ON EXTENSION nome_da_extensão
ALTER INDEX [ IF EXISTS ] nome_do_índice​
    SET ( parâmetro_de_armazenamento [= valor] [, ... ] )
ALTER INDEX [ IF EXISTS ] nome_do_índice​
    RESET ( parâmetro_de_armazenamento [, ... ] )
ALTER INDEX [ IF EXISTS ] nome_do_índice​
    ALTER [ COLUMN ] número_da_coluna
    SET STATISTICS inteiro
ALTER INDEX ALL IN TABLESPACE nome_do_índice​
    [ OWNED BY nome_da_role [, ... ] ]
    SET TABLESPACE novo_espaço_de_tabelas [ NOWAIT ]

Descrição

O comando ALTER INDEX altera a definição de um índice existente. Existem várias subformas descritas abaixo. Note que o nível de bloqueio necessário pode ser diferente para cada subforma. É adquirido o bloqueio ACCESS EXCLUSIVE, a menos que algum outro seja explicitamente indicado. Quando vários subcomandos estão juntos, o bloqueio adquirido será o mais estrito exigido por qualquer um dos subcomandos.

RENAME

A forma RENAME altera o nome do índice. Se o índice estiver associado a uma restrição de tabela (seja UNIQUE, PRIMARY KEY ou EXCLUDE), a restrição também será renomeada. Não há efeito sobre os dados armazenados.

Alterar o nome do índice adquire o bloqueio SHARE UPDATE EXCLUSIVE.

SET TABLESPACE

Esta forma altera o espaço de tabelas do índice para o espaço de tabelas especificado, e move o(s) arquivo(s) de dados associado(s) ao índice para o novo espaço de tabelas. Para alterar o espaço de tabelas de um índice, é necessário ser o dono do índice e ter o privilégio CREATE no novo espaço de tabelas. Podem ser movidos todos os índices no banco de dados corrente em um espaço de tabelas usando a forma ALL IN TABLESPACE, que bloqueia todos os índices a serem movidos, e depois move cada um deles. Esta forma também permite OWNED BY, que move apenas os índices pertencentes às funções de banco de dados (roles) especificadas. Se for especificada a opção NOWAIT, o comando irá falhar se não conseguir obter todos os bloqueios necessários imediatamente. Note que os catálogos do sistema não são movidos por este comando. Neste caso, deve-se usar ALTER DATABASE, ou uma chamada explícita de ALTER INDEX. Veja também CREATE TABLESPACE.

ATTACH PARTITION nome_do_índice

Faz com que o índice indicado (possivelmente qualificado por esquema) seja anexado ao índice alterado. O índice indicado deve estar em uma partição da tabela que contém o índice que está sendo alterado, e ter uma definição equivalente. Um índice anexado não pode ser excluído por si só, sendo excluído automaticamente quando seu índice pai for excluído.

DEPENDS ON EXTENSION nome_da_extensão
NO DEPENDS ON EXTENSION nome_da_extensão

Esta forma marca o índice como dependente da extensão, ou não mais dependente dessa extensão se for especificado NO. Um índice marcado como dependente de uma extensão é excluído automaticamente quando a extensão é excluída.

SET ( parâmetro_de_armazenamento [= valor] [, ... ] )

Esta forma altera um ou mais parâmetros de armazenamento, específicos do método de índice, para o índice. Veja CREATE INDEX para obter detalhes sobre os parâmetros disponíveis. Note que o conteúdo do índice não será modificado imediatamente por este comando; dependendo do parâmetro, pode ser necessário reconstruir o índice usando o comando REINDEX para obter os efeitos desejados.

RESET ( parâmetro_de_armazenamento [, ... ] )

Esta forma redefine um ou mais parâmetros de armazenamento, específicos do método de índice, para seu valor padrão. Assim como em SET, pode ser necessário usar o comando REINDEX para atualizar o índice completamente.

ALTER [ COLUMN ] número_da_coluna SET STATISTICS inteiro

Esta forma define o valor para coleta de estatísticas por coluna para as operações ANALYZE subsequentes, mas só pode ser usada em colunas de índice definidas como uma expressão. Como as expressões não têm nome único, é usado o número ordinal da coluna do índice para se referir a elas. O valor pode ser definido no intervalo de 0 a 10000; como alternativa, pode ser definido como -1 para voltar a usar o valor de estatísticas padrão do sistema (default_statistics_target). Para obter mais informações sobre o uso de estatísticas pelo planejador de consultas do PostgreSQL, veja Estatísticas usadas pelo planejador.

Parâmetros

IF EXISTS

Não será relatado nenhum erro se o índice não existir. É emitido um aviso neste caso.

número_da_coluna

O número ordinal refere-se à posição ordinal (da esquerda para a direita) da coluna do índice.

nome_do_índice

O nome (possivelmente qualificado pelo esquema) do índice existente a ser alterado.

novo_nome

O novo nome para o índice.

nome_do_espaço_de_tabelas

O espaço de tabelas para o qual o índice será movido.

nome_da_extensão

O nome da extensão da qual o índice irá depender.

parâmetro_de_armazenamento

O nome do parâmetro de armazenamento específico do método de índice.

valor

O novo valor para o parâmetro de armazenamento específico do método de índice. Pode ser um número ou uma palavra, dependendo do parâmetro.

Notas

Estas operações também são possíveis de serem feitas usando o comando ALTER TABLE. O comando ALTER INDEX é, na verdade, apenas um alias para as formas de ALTER TABLE que se aplicam a índices.

Antes, havia a variante ALTER INDEX OWNER, mas agora é ignorada (com uma advertência). O índice não pode ter um dono diferente do dono de sua tabela. Alterar o dono da tabela também altera automaticamente o dono do índice.

Alterar qualquer parte de um índice do catálogo do sistema não é permitido.

Exemplos

Para alterar o nome um índice existente:

ALTER INDEX distributors RENAME TO suppliers;

Para mover o índice para um espaço de tabelas diferente:

ALTER INDEX distributors SET TABLESPACE fasttablespace;

Para alterar o fator de preenchimento de um índice (supondo que o método de índice dê suporte a esta operação):

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

Definir o valor para coleta de estatísticas de um índice de expressão:

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

Conformidade

O comando ALTER INDEX é uma extensão do PostgreSQL à linguagem SQL.

Veja também

CREATE INDEX, REINDEX