pg_dump ed ERRORE: numero di blocco 0 mancante per il valore del brindisi


10

Sto usando PostgreSQL 8.4.15. Durante l'esecuzione pg_dumpper il backup di un database, ho riscontrato il seguente errore:

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 ...)

Durante la ricerca di questo messaggio di errore, ho trovato un paio di riferimenti ( qui e qui ) che hanno suggerito di reindicizzare la tabella. (In queste discussioni, c'era un riferimento all'interrogazione della pg_classtabella per trovare il pg_toast_XXXXXXvalore giusto , ma sembrava che fosse perché non era visualizzato nei loro messaggi di errore. Ho saltato questa parte perché avevo un valore visualizzato nel messaggio di errore Immagino che potrebbe essere una comodità a causa di una versione successiva di PostgreSQL.)

Ho eseguito il seguente:

REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;

Ora sono in grado di utilizzare pg_dumpsenza errori.

Cosa pg_toaste cosa hanno effettivamente fatto questi comandi? Si tratta semplicemente di una semplice pulizia o potrebbero essersi sbarazzati di alcune righe in quella tabella? Cosa potrebbe aver causato il problema in primo luogo?

Ci sono circa 300000 righe in questa tabella, ma mi aspetto che ci siano solo circa 250 nuove righe dal precedente backup riuscito (questa tabella viene utilizzata solo per INSERT / SELECT, senza AGGIORNAMENTI).


Ho trovato questa idea . Puoi verificare se il tuo caso è lo stesso?
dezso,

Questo potrebbe anche aiutare stackoverflow.com/questions/47533639/...
papanito

Risposte:


6

Dato che quello che hai fatto è stato un reindex, quello che è probabilmente accaduto è stato usare una scansione dell'indice per cercare di individuare i valori tostati nella tabella e non è stato possibile trovarne uno. Sembra un indice corrotto. L'analisi del vuoto altera la tabella, ma reindex no e le modifiche sono molto minori.

Il modo di pensare a questo è che gli attributi TOASTed sono effettivamente suddivisi in blocchi di dimensioni di circa 4k e questi sono memorizzati in righe. Vengono cercati e ordinati / ricollegati con la riga principale al momento della query. Sembra che un indice usato qui sia stato corrotto e quindi il reindice ha risolto il problema.

Ho scoperto che gli indici danneggiati sono di solito un segno che qualcosa non va bene con il server. È bene controllare e assicurarsi che la memoria, la CPU e i dischi rigidi siano tutti felici e non riportino problemi. Ho riscontrato che i server di surriscaldamento sono particolarmente inclini alla corruzione degli indici e se gli indici possono essere corrotti, bisogna anche preoccuparsi che i dati vengano danneggiati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.