amcheck relata o seguinte erro:
select bt_index_parent_check(34465);
ERROR: item order invariant violated for index "admin_access_rights_pkey"
DETAIL: Lower index tid=(282,71) (points to heap tid=(201,46)) higher index tid=(282,72) (points to heap tid=(197,38)) page lsn=396C/DDF2FD00
Como posso corrigir esse problema?
A documentação diz que isso REINDEX
pode não ajudar.
Um REINDEX pode não ser eficaz na reparação da corrupção.
Esse erro pode ser causado por :
PRIMARY KEY
kill -9
)Verifique se há duplicados
PRIMARY KEY
:Exclua chaves duplicadas, se encontrar alguma:
Em muitos casos, parece ser suficiente reconstruir o índice usando
REINDEX
:Para um índice corrompido, prefiro a versão mais lenta e segura em vez de
REINDEX CONCURRENTLY
. Vi alguns problemas (espero que agora corrigidos) ao usarREINDEX CONCURRENTLY
.Outra opção é usar
pg_repack
o que permite o reempacotamento de tabelas e a reconstrução de índices em segundo plano. Se bem-sucedido, o índice será movido para substituir o original. Essa abordagem pode evitar bloqueios desnecessários. Embora a reconstrução de tabelas grandes possa levar um tempo significativo.pg_repack
pode estar em execução para todo o banco de dados:-N
/--dry-run
imprimir somente recursos reembalados-j
/--jobs=4
número de trabalhos paralelos-x
/--only-indexes
reconstruir apenas índices-c
/--schema=public
esquema específico apenas