我目前正在使用一个使用Postgresql进行数据存储的embedded式系统。 我们目前有一个问题,有时箱子会重新启动,没有警告,并没有正确的关机。 这在某些情况下显然会给我们带来数据库问题(某些高stream量表中的无效页头是最常见的症状)。
我想知道的是,清除错误最简单的方法是什么? 我显然会丢失数据,但是由于错误通常发生在有短暂数据的表中,所以我并不在意,我只想让系统恢复运行。
现在我们的程序是删除和重新创build任何受折磨的表。 还有什么我们可以做的,会更快? 正如我所说,我可以丢失受影响的页面上的任何数据,我只是想要的东西,并运行。
平台是Ubuntu 7.04,Postgresql 8.2(我们现在不能强制升级到客户端)。 文件系统是2 gig CF卡上的ext3。
显然,修复意外的重新启动是我的首要任务,但是进展缓慢(在实验室很难重现)。 与此同时,我希望能有一个更简单的解决scheme,让我们的现场人员更快处理出现的问题。
你有没有尝试设置WAL同步方法 fsync_writethrough ?
只是想跟随bandaiding,以防有人需要它:
您可以启用zero_damaged_pages并在受影响的表上运行VACCUUM,这将清除包含已知缺陷数据的任何页面。 但是,这并不能保护你的列值不被破坏,因为PostgreSQL目前没有数据块/页面级校验和。
所以这是最后的select,固定问题的来源总是可取的;)。