7

我正在尝试读取 postgresql 的 WAL 文件,任何人都可以告诉我如何做到这一点 n WAL 二进制文件中使用了哪种类型的二进制编码

4

4 回答 4

6

用于读取WALpg_xlogdump文件(此 contrib 程序添加到 PG 9.3 版本 - PG 9.3 发布的文档

此实用程序只能由安装服务器的用户运行,因为它需要对数据目录的只读访问权限。

pg_xlogdump --help
pg_xlogdump decodes and displays PostgreSQL transaction logs for debugging.

Usage:
  pg_xlogdump [OPTION]... [STARTSEG [ENDSEG]]

Options:
  -b, --bkp-details      output detailed information about backup blocks
  -e, --end=RECPTR       stop reading at log position RECPTR
  -f, --follow           keep retrying after reaching end of WAL
  -n, --limit=N          number of records to display
  -p, --path=PATH        directory in which to find log segment files
                         (default: ./pg_xlog)
  -r, --rmgr=RMGR        only show records generated by resource manager RMGR
                         use --rmgr=list to list valid resource manager names
  -s, --start=RECPTR     start reading at log position RECPTR
  -t, --timeline=TLI     timeline from which to read log records
                         (default: 1 or the value used in STARTSEG)
  -V, --version          output version information, then exit
  -x, --xid=XID          only show records with TransactionId XID
  -z, --stats[=record]   show statistics instead of records
                         (optionally, show per-record statistics)
  -?, --help             show this help, then exit

例如:pg_xlogdump 000000010000005A00000096

PostgreSQL 文档此博客

于 2016-11-23T07:17:46.730 回答
5

你真的不能那样做。从 WAL 存档中读取字节很容易,但听起来你想理解它们。你会为此挣扎。

WAL 档案是一个二进制日志,显示数据库中哪些块发生了变化。它们不是 SQL 级别或行级别的更改日志,因此您不能只检查它们以获取更改行的列表。

您可能希望改为调查基于触发器的复制或审计触发器。

于 2012-12-27T09:34:08.983 回答
3

正如其他答案所暗示的那样,格式复杂且低级。

但是,如果您有时间学习和理解存储的数据,并且知道如何从源代码构建二进制文件,则有一个已发布的阅读器8.3版本9.2xlogdump

构建它的常用方法是作为一个contrib(Postgres 附加组件):

  • 首先获取您希望查看 WAL 数据的 Postgres 版本的源代码。
    • ./configure还有make这个,但不需要安装
  • 然后将 xlogdump 文件夹复制到contrib文件夹(该文件夹中的 git clone 工作正常)
  • 运行makexlogdump - 它应该找到父 postgres 结构并构建二进制文件

您可以将二进制文件复制到您的路径,或在原位使用它。请注意,在您了解您所看到的内容之前,仍然需要大量 Postgres 的内部知识。如果您有可用的数据库,可以尝试从日志中反转 SQL 语句。

要在 Java 中执行此操作,您可以包装可执行文件、将 C 库链接为混合库,或者找出如何从源代码进行所需的解析。这些选项中的任何一个都可能涉及大量详细的工作。

于 2014-02-17T12:42:18.903 回答
0

WAL 文件与实际数据库文件本身的格式相同,并且取决于您使用的 PostgreSQL 的确切版本。您可能需要检查特定版本的源代码以确定确切的格式。

于 2012-12-27T09:00:49.407 回答