我的 Postgres 9.6 数据库已损坏。它运行的硬件出现故障,并且数据库中至少有一个损坏的页面。运行 pg_dump 时出现以下错误:
pg_dump: WARNING: page verification failed, calculated checksum 24925 but expected 25309
pg_dump: Dumping the contents of table "my_table" failed: PQgetResult() failed.
pg_dump: Error message from server: ERROR: invalid page in block 250471 of relation base/16384/754450
即使数据丢失,这个特定的表也很容易修复,所以我想做的就是将该页面完全清零并继续处理数据库。但我找不到如何做到这一点的方法,如何告诉 Postgres 忽略错误,删除该页面中的数据并继续?pg_dump 本身似乎没有这样的选项。
我还想知道是否存在更多校验和错误,但我为此找到的工具仅自 Postgres 11 以来存在,而不是在我的旧版本中。
如何通过删除坏页中的所有数据来修复坏页,以便数据库可以继续运行并且 pg_dump 可以再次运行?
设置
zero_damaged_pages
为on
,那么 PostgreSQL 会将每个带有损坏标头的页视为空页,并且您可以转储表。