pg_dump y ERROR: falta el trozo número 0 para el valor del brindis


10

Estoy usando PostgreSQL 8.4.15. Mientras ejecutaba pg_dumppara hacer una copia de seguridad de una base de datos, recibí el siguiente error:

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

Al buscar este mensaje de error, encontré un par de referencias ( aquí y aquí ) que sugerían reindexar la tabla. (En estas discusiones, había una referencia a la consulta de la pg_classtabla para encontrar el pg_toast_XXXXXXvalor correcto , pero parecía que era porque no se mostraba en sus mensajes de error. Omití esta parte porque tenía un valor mostrado en el mensaje de error Supongo que podría ser una conveniencia debido a una versión posterior de PostgreSQL).

Ejecuté lo siguiente:

REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;

Ahora puedo usar pg_dumpsin errores.

¿Qué pg_toasty qué hicieron realmente estos comandos? ¿Se trata simplemente de una simple limpieza o podrían haber eliminado algunas filas en esa tabla? ¿Qué pudo haber causado el problema en primer lugar?

Hay alrededor de 300000 filas en esta tabla, pero esperaría que solo haya alrededor de 250 filas nuevas desde la copia de seguridad anterior exitosa (esta tabla solo se usa para INSERTAR / SELECCIONAR, sin ACTUALIZACIONES).


He encontrado esta idea . ¿Puedes verificar si tu caso es el mismo?
dezso

Esto también podría ayudar a stackoverflow.com/questions/47533639/…
papanito

Respuestas:


6

Dado que lo que hizo fue reindexar, lo que probablemente sucedió fue que usó un escaneo de índice para intentar ubicar los valores tostados en la tabla y no pudo encontrar uno. Esto suena como un índice corrupto. El análisis de vacío altera la tabla, pero reindex no y los cambios son muy pequeños.

La forma de pensar en esto es que los atributos TOASTed se dividen en trozos de aproximadamente 4k de tamaño y se almacenan en filas. Se buscan y se ordenan / reconectan con la fila principal en el momento de la consulta. Parece que un índice utilizado aquí estaba dañado y, por lo tanto, el reindex resolvió el problema.

He encontrado que los índices corruptos suelen ser una señal de que algo no está bien con el servidor. Es bueno verificar y asegurarse de que la memoria, la CPU y los discos duros estén contentos y no denuncien problemas. He descubierto que los servidores de sobrecalentamiento son particularmente propensos a la corrupción del índice y si los índices pueden corromperse, uno tiene que preocuparse de que los datos también se corrompan.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.