PostgreSQL:块中无效的页眉

MrB*_*les 19 postgresql block

我收到了错误

ERROR:  invalid page header in block 411 of relation "t_value_time"
Run Code Online (Sandbox Code Playgroud)

在我的PostgreSQL数据库中.这种情况在不同的机器上发生.有没有办法防止它发生,或者至少告诉PSQL忽略无效块上的数据并继续前进?

我宁愿丢失块中的数据,让他跳过它,读取剩下的数据.有没有办法告诉PSQL跳过这个块?

Vla*_*lad 27

警告:您将丢失一些数据!

我们设法通过发出以下命令来克服它(崩溃的DEV VM):

database=# SET zero_damaged_pages = on;
SET
database=# VACUUM FULL damaged_table;
WARNING: invalid page header in block xxx of relation base/yyy/zzz; zeroing out page
[..]
REINDEX TABLE damaged_table;
Run Code Online (Sandbox Code Playgroud)

通过pwkg.ork修复.

  • 这是正确的解决方案.清除警告并非严格要求"VACUUM FULL"和"REINDEX".从磁盘读取页面并触发"无效页眉"错误的任何操作都会修复损坏的页面(通过重写全部为零)如果"zero_damaged_pa​​ges"打开,那么你可以做一个查看错误的查询页. (2认同)

Mik*_*ll' 2

每次都是同一个块吗?

据我所知,无效块的最常见原因是硬件。Red Hat 有一个实用程序pg_filedump,可以将“PostgreSQL 堆、索引和控制文件格式化为人类可读的形式”。我认为他们不支持任何高于 8.4.0 的 PostgreSQL 版本,但我可能是错的。

您希望通过使用可靠、彻底的磁盘、RAM 和 NIC 诊断来证明您的硬件良好。