2025年9月25日: PostgreSQL 18 发布!

XlogMiner 增强功能已发布并更名为 WalMiner

发布于 2019-02-22,作者:Highgo Software
相关开源项目

XlogMiner 是一个用于解析 PostgreSQL WAL 中已执行 SQL 语句的工具,可以生成相应的撤销 SQL 语句。开源项目地址为 https://github.com/HighgoSoftware/XLogMiner。此版本存在较大的使用限制,需要将 wal level 设置为 logical,并需要将表设置为 IDENTITY FULL 模式。这可能会加剧 wal 的膨胀并降低数据库性能。

为了适应 PG 日志名称的更改,XlogMiner 已重命名为 WalMiner。新的开源地址暂时位于 https://gitee.com/movead/XLogMiner

发布增强功能

旧版工具 xlogminer 的解析源是当前 wal 记录中的“更改数据”。它不从 FPW 中的页面获取数据来解析 wal 记录。

新版 walminer 不仅可以解析当前 wal 记录的 FPW,还可以记录和重放解析过程中出现的所有 FPW。因此,walminer 可以解析低级别的 wal,并且您无需将表设置为 IDENTITY FULL 模式。

此外

1. WalMiner 支持解析最小级别之上的任何 wal 日志级别。

2. 无需将表设置为 IDENTITY FULL 模式。

3. 增强了对系统表修改的 wal 记录的解析能力。

4. 修复了在发生 relfilenode 更改后,在其他数据库中解析失败的 bug。

WalMiner 带来的新限制

Walminer 可以完全解析给定 wal 中第一个检查点之后的所有 wal 记录。第一个检查点之前的 delete 和 update 记录可能无法解析,如下所示:

UPDATE "public"."t1" SET VALUES(NULL) (NOTICE:wal is not enought.);

如果您需要解析此记录,只需添加一些更早的 wal 段即可。

具体用法请参见开源代码中的 README.EN.MD。

限制

  1. 此版本仅解析 DML 语句,不处理 DDL 语句。未来更改:DDL 语句的解析已添加到待办事项列表中,可能会逐步支持各种 DDL 语句。
  2. 当执行以下 DDL 相关操作时,DML 语句不会被解析出来:删除/截断表、表空间修改和列类型修改等。响应:建议保存数据字典以确保在执行表结构更改之前能够解析历史 wal 日志。未来更改:现在我已在 walminer 中添加了保存数据字典的功能。
  3. 解析结果取决于最新的数据库字典。例如,在 user1 创建表 t1 后,表所有者被修改为 user2,那么与表 t1 相关的所有解析结果都将标记为 user2。响应:建议保存数据字典以确保在执行表结构更改之前能够解析历史 wal 日志。未来更改:现在我已在 walminer 中添加了保存数据字典的功能。
  4. “ctid”属性是“当时”的更改值。如果由于 vacuum 或其他操作导致“ctid”发生更改,该值将不准确。我们需要使用此值来确定重复数据的对应撤销元组,这并不意味着您可以直接执行此类撤销语句。
  5. 如果执行了 DDL 语句“drop”,则在此 DDL 执行之前,所有相关的列值都将被解码为“encode('AD976BC56F',hex)”。
  6. 只能解析与数据字典时间线一致的 wal 文件。
  7. WalMiner 是一个独立的产品,尚未经过全面测试。

联系我

如果您发现 bug 或有好的建议,可以通过电子邮件 (lchch1990@sina.cn) 与我联系。