REINDEX { TABLE | DATABASE | INDEX } nome [ FORCE ]
Reconstrói todos os índices da tabela especificada.
Reconstrói todos os índices do sistema do banco de dados especificado (Os índices das tabelas dos usuários não são incluídos).
Reconstrói o índice especificado.
O nome da tabela, banco de dados ou índice a ser reindexado.
Força a reconstrução dos índices do sistema. Sem esta palavra chave o comando REINDEX pula os índices do sistema que não estão marcados como inválidos. FORCE é irrelevante para o comando REINDEX INDEX, ou para reindexar índices do usuário.
O comando REINDEX é utilizado para reconstruir índices corrompidos. Embora na teoria nunca deve haver esta necessidade, na prática os índices podem se tornar corrompidos devido a erros de programação ou falhas nos equipamentos. O comando REINDEX fornece um método de recuperação.
Se houver a suspeita de que um índice de uma tabela do usuário está corrompido, pode-se simplesmente reconstruir este índice, ou todos os índices da tabela, usando o comando REINDEX INDEX ou REINDEX TABLE.
Note: Outra forma de tratar o problema de índice corrompido em tabela do usuário é simplesmente eliminá-lo e recriá-lo. Pode-se preferir esta forma para manter alguma aparência de uma operação normal em uma tabela. O comando REINDEX obtém um bloqueio exclusivo da tabela, enquanto o comando CREATE INDEX bloqueia a escrita mas não a leitura da tabela.
A situação se torna mais difícil quando é necessário recuperar um índice corrompido de uma tabela do sistema. Neste caso é importante que o servidor efetuando a recuperação não esteja usando nenhum dos índices suspeitos (Sem dúvida, neste tipo de cenário pode acontecer do servidor estar caindo durante a inicialização por depender do índice corrompido). Para executar a recuperação segura, o postmaster deve ser parado e um servidor autônomo (stand-alone) do PostgreSQL deve ser iniciado fornecendo-se as opções de linha de comando -O e -P (estas opções permitem modificar as tabelas do sistema e faz com que os índices do sistema não sejam utilizados, respectivamente). Então se executa o comando REINDEX INDEX, REINDEX TABLE, ou REINDEX DATABASE dependendo de quanto se deseja reconstruir. Na dúvida deve ser utilizado o comando REINDEX DATABASE FORCE para forçar a reconstrução de todos os índices do sistema no banco de dados. Em seguida o servidor autônomo deve ser parado e o postmaster reiniciado.
Como esta é provavelmente a única situação em que a maioria das pessoas usa um servidor autônomo, algumas observações devem ser feitas:
Inicie o servidor com um comando como
postgres -D $PGDATA -O -P meu_banco_de_dados
Forneça o caminho correto para a área de banco de dados na opção -D, ou assegure-se de que a variável de ambiente PGDATA está declarada. Também deve ser especificado o nome do banco de dados em particular em que se deseja trabalhar.
Pode ser executado qualquer comando SQL e não apenas o REINDEX.
Tenha em mente que o servidor autônomo trata o caractere de nova-linha como término da entrada do comando; não existe a inteligência sobre o ponto-e-vírgula como existe no psql. Para um comando prosseguir através de várias linhas, deve-se digitar uma contrabarra precedendo cada caractere de nova-linha, exceto da última. Também não existe nenhuma das conveniências do processamento da linha lida (não existe o histórico dos comandos, por exemplo).
Para sair do servidor digite EOF (geralmente control-D).
Consulte a página de referência do postgres para obter mais informações.