pg_dump e ERROR: número de bloco 0 ausente para o valor do brinde


10

Estou usando o PostgreSQL 8.4.15. Ao executar o pg_dumpbackup de um banco de dados, recebi o seguinte erro:

pg_dump: SQL command failed
pg_dump: Error message from server: ERROR:  missing chunk number 0 for toast value 123456789 in pg_toast_987654321
pg_dump: The command was: COPY public.my_table (id, .... all the columns ...)

Ao procurar essa mensagem de erro, encontrei algumas referências ( aqui e aqui ) que sugeriam reindexar a tabela. (Nessas discussões, havia uma referência à consulta da pg_classtabela para encontrar o pg_toast_XXXXXXvalor correto , mas parecia que era porque não era exibida nas mensagens de erro. Ignorei esta parte porque havia um valor exibido na mensagem de erro Eu acho que pode ser uma conveniência devido a uma versão posterior do PostgreSQL.)

Eu executei o seguinte:

REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;

Agora sou capaz de usar pg_dumpsem erros.

O que é pg_toaste o que esses comandos realmente fizeram? Trata-se apenas de limpeza simples ou poderiam ter se livrado de algumas linhas nessa tabela? O que poderia ter causado o problema em primeiro lugar?

Existem cerca de 300000 linhas nesta tabela, mas eu esperaria que houvesse apenas cerca de 250 novas linhas desde o backup anterior bem-sucedido (essa tabela é usada apenas para INSERT / SELECT, sem UPDATEs).


Eu encontrei essa ideia . Você pode verificar se o seu caso é o mesmo?
Dez26

Respostas:


6

Como o que você fez foi uma reindexação, o que provavelmente aconteceu foi que ele usou uma varredura de índice para tentar localizar os valores tostados na tabela e não conseguiu encontrar um. Isso soa como um índice corrompido. A análise a vácuo altera a tabela, mas a reindexação não e as alterações são muito pequenas.

A maneira de pensar sobre isso é que os atributos do TOASTed são realmente divididos em pedaços de aproximadamente 4k de tamanho e são armazenados em linhas. Eles são procurados e classificados / reconectados com a linha principal no momento da consulta. Parece que um índice usado aqui foi corrompido e, portanto, a reindexação resolveu o problema.

Eu descobri que índices corrompidos geralmente são um sinal de que algo não está bem com o servidor. É bom verificar e garantir que a memória, a CPU e os discos rígidos estejam felizes e não relatando problemas. Eu descobri que os servidores de superaquecimento são particularmente propensos à corrupção de índices e, se os índices podem ficar corrompidos, é preciso se preocupar também com a corrupção dos dados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.