Estou usando o PostgreSQL 8.4.15. Ao executar o pg_dump
backup 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_class
tabela para encontrar o pg_toast_XXXXXX
valor 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_dump
sem erros.
O que é pg_toast
e 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).