检查Postgres WAL文件中的空白

我想编写一个脚本来检查我的归档WAL文件中的空白,但是我找不到编号scheme的任何文档。 它看起来相当简单,但是我希望将我的脚本从一些官方文档中删除,这样我就不会错过任何隐藏的滚动复杂等。

这从文件系统来看并不容易。 文件名实际上是三个部分(每个8个字符,hex值):时间轴,逻辑XLOG,物理段。 为了知道“下一个”文件是什么,你真的需要知道底层数据库(新的xlog,新的时间线等)发生了什么。

如果您归档事务日志,更好的解决scheme是让您的归档命令也将归档文件的名称附加到列表的某处 – Postgres将名称传递给您的归档脚本,因此您不必担心find它你自己,如果列表中的所有文件都存在,你就没有空白。
(这并不能解决你实现这个解决scheme之前确保你没有空白的问题,所以你应该实现这个解决scheme后, 按照Postgres手册中的24.3.2进行基础备份 …

源代码之外没有任何文档。 有一个代码的演练 ,解释它,以及我所知道的任何东西,试图解决你是同样的问题。 以hex向上计算最后两位数字,直到到达FE,然后滚动到0,并增加中间的第二个日志数字段。 理解WAL命名法中的注释也有帮助。

没有logging的原因之一是你可以在编译时更改它。 在实践中没有人这样做。 另一个问题是,一旦你激活一个待机系统或者做其他事情来改变时间轴ID,那么所有的序列保证都没有了。 对大多数人来说,这在实践中也不是问题。 如果发生这种情况,无论如何也要检查监控。