Hemos configurado la base de datos postgresql 11 en un sistema. Hay unas 8 mesas. Desde hace unos días, nos enfrentamos a este problema.
ERROR: invalid page in block 9698 of relation base/16385/16560 SQL state: XX001 Según mi investigación, deberíamos configurar set zero_damaged_pages=on; para solucionar este problema. Hemos establecido y ejecutado algunas consultas de selección que funcionan bien. Entonces decidimos hacer una copia de seguridad de esta base de datos a través de pg_dump. Este trabajo no se completó con éxito, pero copió todos los registros.
Ahora, en el nuevo sistema, importamos la copia de seguridad, nos hemos dado cuenta de que el esquema de la base de datos no se copia correctamente aquí debido a que se produjo la duplicación de datos. Repetimos esto con otra base de datos que estaba bien. Todo funciona bien, incluida la restauración.
Finalmente, concluyo que por error en un bloque de página no se realizó correctamente el respaldo de la base de datos. ¿Existe alguna opción como set zero_damaged_pages=on; en pg_dump para ignorar la página de error pero completar la parte posterior o cualquier otra solución.
Esta no es una solución para "arreglar" datos rotos , solo una forma de poder volcar lo que queda.
Y de ninguna manera soy un experto en postgres, pero creo que la pregunta es válida y merece al menos algún tipo de respuesta. Y dado que yo mismo lo usé para volcar datos de una base de datos que se ejecuta durante varias horas en una máquina con discos llenos y sin espacio disponible, sé que le permite realizar un volcado, siempre que comprenda que se pierden algunos datos :
encuentre el nombre de la tabla a partir de la descripción del error; por ejemplo, en pg_dump: The command was: COPY foo.some_table (col1, col2, col3) TO stdout; es foo.some_table
ejecute psql como pgadmin en la base de datos que estaba tratando de volcar (digamos que es my_cool_db ):
$ sudo su - postgres psql my_cool_db"arreglar" páginas rotas:
my_cool_db=# SET zero_damaged_pages = on; SET my_cool_db=# VACUUM FULL foo.some_table; WARNING: invalid page in block 54809 of relation base/48461770/48462009; zeroing out page WARNING: invalid page in block 54810 of relation base/48461770/48462009; zeroing out page ... VACUUM my_cool_db=# REINDEX TABLE foo.some_table;cerrar sesión en psql y cerrar sesión en pgadmin
descargue su db (o repita para otras tablas rotas)
Fuente: https://lxadm.com/PostgreSQL:_ERROR:_invalid_page_header_in_block_13760_of_relation_base/16995/67484