如何通过java读取pg_xlog目录中的WAL文件

use*_*481 6 java postgresql postgresql-9.1

我试图读取postgresql的WAL文件可以任何正文告诉我如何做到这一点在WAL二进制文件中使用了什么类型的二进制编码

Cra*_*ger 5

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

WAL归档是一个二进制日志,显示数据库中更改的块.它们不是SQL级别或行级别更改日志,因此您不能只检查它们以获取已更改行的列表.

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


Lua*_*ynh 5

使用pg_xlogdump读取WAL文件(这contrib请程序添加到PG 9.3版本- PG 9.3发布DOC

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

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
Run Code Online (Sandbox Code Playgroud)

例如: pg_xlogdump 000000010000005A00000096

PostgreSQL文档此博客


Gre*_*ill 0

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