References:
PostgreSQL 提供了多种日志类型,用于监控数据库活动、排查问题和优化性能. 主要有服务器日志、预写式日志(Write-Ahead Log) 等. 除此, 还包括初始化日志(initlog).
使用 postgres 用户查询 /var/lib/pgsql 目录, 其中有 initlog 和 logfile 两个日志文件.
postgres@LAPTOP-Q34L5TP8:~> pwd /var/lib/pgsql postgres@LAPTOP-Q34L5TP8:~> ls data initlog logfile
服务器日志一般保存在
postgres@LAPTOP-Q34L5TP8:~/data/log> ls postgresql-2025-09-11_085752.log
服务器日志记录服务器的运行状态以及错误信息, 用于及时排查服务器方面出现的问题.
内容形如2025-09-11 08:57:52.007 CST [646]LOG: starting PostgreSQL 17.6 on x86_64-suse-linux-gnu, compiled by gcc (SUSE Linux) 15.1.1 20250801, 64-bit 2025-09-11 08:57:52.009 CST [646]LOG: listening on IPv6 address "::1", port 5432 2025-09-11 08:57:52.009 CST [646]LOG: listening on IPv4 address "127.0.0.1", port 5432 2025-09-11 08:57:52.009 CST [646]LOG: could not bind IPv4 address "127.0.0.1": Address already in use 2025-09-11 08:57:52.009 CST [646]HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry. 2025-09-11 08:57:52.011 CST [646]LOG: listening on Unix socket "/run/postgresql/.s.PGSQL.5432" 2025-09-11 08:57:52.070 CST [650]LOG: database system was shut down at 2025-09-11 08:57:51 CST 2025-09-11 08:57:52.079 CST [646]LOG: database system is ready to accept connections 2025-09-11 08:59:30.474 CST postgres postgres [679]LOG: provided user name (postgres) and authenticated user name (haifeng) do not match 2025-09-11 08:59:30.474 CST postgres postgres [679]FATAL: Peer authentication failed for user "postgres" 2025-09-11 08:59:30.474 CST postgres postgres [679]DETAIL: Connection matched file "/var/lib/pgsql/data/pg_hba.conf" line 113: "local all all peer" 2025-09-11 09:02:52.178 CST [648]LOG: checkpoint starting: time 2025-09-11 09:02:56.779 CST [648]LOG: checkpoint complete: wrote 48 buffers (0.3%); 0 WAL file(s) added, 0 removed, 0 recycled; write=4.543 s, sync=0.028 s, total=4.601 s; sync files=11, longest=0.016 s, average=0.003 s; distance=290 kB, estimate=290 kB; lsn=0/1576760, redo lsn=0/1576708 2025-09-11 10:11:33.859 CST haifeng haifeng [1035]FATAL: role "haifeng" does not exist 2025-09-11 10:48:24.669 CST postgres postgres [1157]ERROR: column "catelog" does not exist at character 45 2025-09-11 10:48:24.669 CST postgres postgres [1157]HINT: Perhaps you meant to reference the column "pg_settings.category".
WAL 是 Write-Ahead Log 的缩写, 即预写式日志. WAL 文件是 PostgreSQL 存储所有数据库修改操作的物理日志文件.
预写式日志所在目录名是
WAL(Write-Ahead Logging,预写式日志)是 PostgreSQL 实现数据持久性和崩溃恢复的核心机制.
WAL 文件是 PostgreSQL 存储所有数据库修改操作的物理日志文件. 它们记录了数据库中所有事务的变更操作(如插入、更新、删除等), 并确保这些变更在写入数据文件之前先被持久化到磁盘. 用于崩溃恢复、时间点恢复.
WAL的核心概念是, 对数据文件(存放表和索引的地方)的更改必须在这些更改被记录之后才被写入, 也就是说,在描述这些更改的WAL记录被刷新到永久存储之后。如果我们遵循这个 程序,我们就不需要在每次事务提交时将数据页刷新到磁盘,因为我们知道在发生 崩溃的情况下,我们可以使用日志恢复数据库:任何尚未应用到数据页的更改都可以 从WAL记录中重做。(这就是前滚恢复,也称为REDO。)
在 PostgreSQL 中,任何数据修改操作(如 INSERT、UPDATE、DELETE)都会先生成 WAL 记录。这些记录会被写入 WAL 文件,确保即使数据库崩溃或断电,数据也不会丢失。恢复时,PostgreSQL 会通过重放(replay)WAL 文件中的记录,将数据库恢复到崩溃前的状态。
如果数据库因异常中断(如断电、系统崩溃),重启时会通过 WAL 文件中的记录,重新应用所有未持久化到数据文件的事务变更,从而保证数据一致性。
WAL 是 PostgreSQL 实现高可用性的基础。主库(Primary)会将 WAL 文件发送给备库(Standby),备库通过重放这些日志实现数据同步。
WAL 文件是固定大小的二进制文件,默认大小为 16MB(可通过 wal_segment_size 配置)。文件名是一个连续的数字序列,例如 000000010000000000000001,表示 WAL 日志的逻辑顺序。
每个 WAL 文件包含多个 WAL 记录(WAL record),记录的内容包括:
LSN 是 WAL 记录的唯一标识符,用于标识日志的位置。每个 WAL 记录都有一个递增的 LSN,例如日志中的 lsn=0/15DFB708 和 redo lsn=0/15DFB6D0 表示当前日志和检查点的位置。
当事务修改数据时,PostgreSQL 会先将变更记录写入内存中的 WAL Buffer。 提交事务时,WAL Buffer 的记录会被刷新到磁盘的 WAL 文件中(通过 fsync 确保持久性)。
如果启用了 WAL 归档(archive_mode=on),WAL 文件会在写满或触发检查点(Checkpoint)后被归档到指定目录(archive_command 配置)。 归档的 WAL 文件用于点到时间恢复(PITR)。
PostgreSQL 会循环使用 WAL 文件. 当 WAL 文件被检查点标记为“已安全重放”后,它们会被覆盖或删除.
日志中的 0 WAL file(s) added, 0 removed, 0 recycled 表示当前没有新增、删除或回收的 WAL 文件。
检查点会将内存中的脏页(Dirty Page)写入数据文件,并标记 WAL 文件中哪些部分可以被安全覆盖。 日志中的 checkpoint complete 表示检查点完成,例如写入了 3 个缓冲区,耗时 0.054 秒。
避免 WAL 文件耗尽(pg_wal 目录空间不足会导致数据库停止)。 优化检查点频率,减少频繁的 I/O 开销。
WAL 文件是 PostgreSQL 实现数据可靠性、崩溃恢复和高可用性的核心组件。它们通过记录所有数据库变更操作,确保即使在异常情况下也能恢复数据. 理解 WAL 文件的生成、管理和优化,对于数据库性能调优和故障排查至关重要.
CSV 日志 postgresql-<日期>.csv 结构化日志数据 日志分析、自动化处理 审计日志 自定义位置 用户活动记录 安全审计、合规性检查
查看
postgres=# select * from pg_stat_activity;
datid | datname | pid | leader_pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | xact_start | query_start | state_change | wait_event_type | wait_event | state | backend_xid | backend_xmin | query_id | query | backend_type
-------+----------+-------+------------+----------+----------+------------------+-------------+-----------------+-------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+-----------------+---------------------+--------+-------------+--------------+----------+---------------------------------+------------------------------
5 | postgres | 11468 | | 10 | postgres | psql | ::1 | | 59276 | 2025-09-17 15:58:19.624955+08 | 2025-09-17 15:59:16.614173+08 | 2025-09-17 15:59:16.614173+08 | 2025-09-17 15:59:16.614182+08 | | | active | | 755 | | select * from pg_stat_activity; | client backend
| | 7272 | | | | | | | | 2025-09-11 14:06:08.817575+08 | | | | Activity | AutovacuumMain | | | | | | autovacuum launcher
| | 7732 | | 10 | postgres | | | | | 2025-09-11 14:06:08.812426+08 | | | | Activity | LogicalLauncherMain | | | | | | logical replication launcher
| | 8136 | | | | | | | | 2025-09-11 14:06:08.523862+08 | | | | Activity | CheckpointerMain | | | | | | checkpointer
| | 8144 | | | | | | | | 2025-09-11 14:06:08.515669+08 | | | | Activity | BgwriterHibernate | | | | | | background writer
| | 8120 | | | | | | | | 2025-09-11 14:06:08.94994+08 | | | | Activity | WalWriterMain | | | | | | walwriter
(6 行记录)
该命令可以查出每个连接上最近一次执行的语句, 例如上面查到执行了
如果执行的 SQL 语句非常耗时, 我们希望能断开此连接或者终止 SQL 语句的运行.
SELECT pg_cancel_backend(pid);
这里的
该操作不会终止连接本身.
如果要终止该连接, 则使用下面的命令.
SELECT pg_terminate_backend(procid);
如果直接终止某个连接, 而该连接正在执行某些SQL语句, 则这些SQL语句也会被停止掉.
例: 终止某个用户的所有连接.
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE usename='some_role';
mydb=> \d+ pg_stat_activity
视图 "pg_catalog.pg_stat_activity"
栏位 | 类型 | 校对规则 | 可空的 | 预设 | 存储 | 描述
------------------+--------------------------+----------+--------+------+----------+------
datid | oid | | | | plain |
datname | name | | | | plain |
pid | integer | | | | plain |
leader_pid | integer | | | | plain |
usesysid | oid | | | | plain |
usename | name | | | | plain |
application_name | text | | | | extended |
client_addr | inet | | | | main |
client_hostname | text | | | | extended |
client_port | integer | | | | plain |
backend_start | timestamp with time zone | | | | plain |
xact_start | timestamp with time zone | | | | plain |
query_start | timestamp with time zone | | | | plain |
state_change | timestamp with time zone | | | | plain |
wait_event_type | text | | | | extended |
wait_event | text | | | | extended |
state | text | | | | extended |
backend_xid | xid | | | | plain |
backend_xmin | xid | | | | plain |
query_id | bigint | | | | plain |
query | text | | | | extended |
backend_type | text | | | | extended |
视图定义:
SELECT s.datid,
d.datname,
s.pid,
s.leader_pid,
s.usesysid,
u.rolname AS usename,
s.application_name,
s.client_addr,
s.client_hostname,
s.client_port,
s.backend_start,
s.xact_start,
s.query_start,
s.state_change,
s.wait_event_type,
s.wait_event,
s.state,
s.backend_xid,
s.backend_xmin,
s.query_id,
s.query,
s.backend_type
FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, gss_delegation, leader_pid, query_id)
LEFT JOIN pg_database d ON s.datid = d.oid
LEFT JOIN pg_authid u ON s.usesysid = u.oid;
mydb=>
pg_database 是数据表, 其从属于 pg_catalog
mydb=> \d+ pg_database
数据表 "pg_catalog.pg_database"
栏位 | 类型 | 校对规则 | 可空的 | 预设 | 存储 | 压缩 | 统计目标 | 描述
----------------+-----------+----------+----------+------+----------+------+----------+------
oid | oid | | not null | | plain | | |
datname | name | | not null | | plain | | |
datdba | oid | | not null | | plain | | |
encoding | integer | | not null | | plain | | |
datlocprovider | "char" | | not null | | plain | | |
datistemplate | boolean | | not null | | plain | | |
datallowconn | boolean | | not null | | plain | | |
dathasloginevt | boolean | | not null | | plain | | |
datconnlimit | integer | | not null | | plain | | |
datfrozenxid | xid | | not null | | plain | | |
datminmxid | xid | | not null | | plain | | |
dattablespace | oid | | not null | | plain | | |
datcollate | text | C | not null | | extended | | |
datctype | text | C | not null | | extended | | |
datlocale | text | C | | | extended | | |
daticurules | text | C | | | extended | | |
datcollversion | text | C | | | extended | | |
datacl | aclitem[] | | | | extended | | |
索引:
"pg_database_oid_index" PRIMARY KEY, btree (oid), 表空间 "pg_global"
"pg_database_datname_index" UNIQUE CONSTRAINT, btree (datname), 表空间 "pg_global"
表空间:"pg_global"
访问方法 heap
查看一下
mydb=> select * from pg_database;
oid | datname | datdba | encoding | datlocprovider | datistemplate | datallowconn | dathasloginevt | datconnlimit | datfrozenxid | datminmxid | dattablespace | datcollate | datctype | datlocale | daticurules | datcollversion | datacl
-------+-----------+--------+----------+----------------+---------------+--------------+----------------+--------------+--------------+------------+---------------+------------+----------+-----------+-------------+----------------+-------------------------------------
5 | postgres | 10 | 6 | c | f | t | f | -1 | 731 | 1 | 1663 | zh-CN | zh-CN | | | 1539.5,1539.5 |
1 | template1 | 10 | 6 | c | t | t | f | -1 | 731 | 1 | 1663 | zh-CN | zh-CN | | | 1539.5,1539.5 | {=c/postgres,postgres=CTc/postgres}
4 | template0 | 10 | 6 | c | t | f | f | -1 | 731 | 1 | 1663 | zh-CN | zh-CN | | | | {=c/postgres,postgres=CTc/postgres}
16393 | mydb | 16388 | 6 | c | f | t | f | -1 | 731 | 1 | 1663 | zh-CN | zh-CN | | | 1539.5,1539.5 |
(4 行记录)
mydb=> \dp+ pg_database
存取权限
架构模式 | 名称 | 类型 | 存取权限 | 列特权 | 策略
------------+-------------+--------+----------------------------+--------+------
pg_catalog | pg_database | 数据表 | postgres=arwdDxtm/postgres+| |
| | | =r/postgres | |
(1 行记录)
mydb=> \d+ pg_authid
数据表 "pg_catalog.pg_authid"
栏位 | 类型 | 校对规则 | 可空的 | 预设 | 存储 | 压缩 | 统计目标 | 描述
----------------+--------------------------+----------+----------+------+----------+------+----------+------
oid | oid | | not null | | plain | | |
rolname | name | | not null | | plain | | |
rolsuper | boolean | | not null | | plain | | |
rolinherit | boolean | | not null | | plain | | |
rolcreaterole | boolean | | not null | | plain | | |
rolcreatedb | boolean | | not null | | plain | | |
rolcanlogin | boolean | | not null | | plain | | |
rolreplication | boolean | | not null | | plain | | |
rolbypassrls | boolean | | not null | | plain | | |
rolconnlimit | integer | | not null | | plain | | |
rolpassword | text | C | | | extended | | |
rolvaliduntil | timestamp with time zone | | | | plain | | |
索引:
"pg_authid_oid_index" PRIMARY KEY, btree (oid), 表空间 "pg_global"
"pg_authid_rolname_index" UNIQUE CONSTRAINT, btree (rolname), 表空间 "pg_global"
表空间:"pg_global"
访问方法 heap
mydb=> select * from pg_authid; 错误: 对表 pg_authid 权限不够
查看
mydb=> \dp+ pg_authid
存取权限
架构模式 | 名称 | 类型 | 存取权限 | 列特权 | 策略
------------+-----------+--------+----------------------------+--------+------
pg_catalog | pg_authid | 数据表 | postgres=arwdDxtm/postgres | |
(1 行记录)
以下内容参考自 https://philipmcclarence.com/guide-to-using-pg_waldump
pg_waldump 是一个 PostgreSQL 自带的命令行工具, 可以以人类可读的格式显示预写日志 (WAL) 文件的内容. WAL 是 PostgreSQL 架构的一个基本组成部分, 提供数据持久性, 并支持复制和时间点恢复等功能. pg_waldump 工具对于检查 WAL 文件以进行调试、审计更改和理解 PostgreSQL 事务日志的内部工作原理非常有用.
Tips for Using pg_waldump The WAL filenames are typically in the format 000000010000000000000001, where the first part is the timeline ID and the rest is the log segment and log file ID. Be sure to run pg_waldump as a user with the necessary file system permissions to read the WAL files. The output of pg_waldump can be quite verbose, especially with the --verbose flag. You may want to redirect the output to a file or pipe it through a tool like less for easier analysis. Remember that pg_waldump is a diagnostic tool, not meant for routine operations. It is most useful when you need to understand the low-level details of WAL records. By familiarizing yourself with pg_waldump, you can gain a deeper understanding of PostgreSQL’s WAL system and have a powerful tool at your disposal for troubleshooting and auditing database changes.
PS C:\Program Files\PostgreSQL\17\data\pg_wal> pg_waldump .\000000010000000000000002 pg_waldump: 错误: 未给出WAL起始位置 pg_waldump: hint: Try "pg_waldump --help" for more information.在 Linux 下
postgres@LAPTOP-Q34L5TP8:~/data/pg_wal> pg_waldump 000000010000000000000001 > ~/pg_wal_1.txt pg_waldump: error: error in WAL record at 0/19C3D20: invalid record length at 0/19C3D58: expected at least 24, got 0 postgres@LAPTOP-Q34L5TP8:~/data/pg_wal> cd postgres@LAPTOP-Q34L5TP8:~> ls data initlog logfile pg_wal_1.txt postgres@LAPTOP-Q34L5TP8:~> ls -l total 4800 drwx------ 20 postgres postgres 4096 Sep 19 16:34 data -rw-r--r-- 1 postgres postgres 905 Sep 11 08:57 initlog -rw------- 1 postgres postgres 187 Sep 7 22:37 logfile -rw-r--r-- 1 postgres postgres 4902526 Sep 19 16:54 pg_wal_1.txt
To display WAL records within a specific range of Log Sequence Numbers (LSNs): This will show records starting at LSN 0/01574360 and stopping at LSN 0/01577790.
postgres@LAPTOP-Q34L5TP8:~> pg_waldump --start=0/01574360 --end=0/01577790 /var/lib/pgsql/data/pg_wal/000 000010000000000000001 rmgr: Heap len (rec/tot): 53/ 8177, tx: 0, lsn: 0/01574360, prev 0/01574320, desc: INPLACE off: 40, blkref #0: rel 1663/1/1259 blk 3 FPW rmgr: Heap len (rec/tot): 53/ 713, tx: 0, lsn: 0/01576370, prev 0/01574360, desc: INPLACE off: 46, blkref #0: rel 1663/1/1259 blk 0 FPW rmgr: Standby len (rec/tot): 138/ 138, tx: 0, lsn: 0/01576640, prev 0/01576370, desc: INVALIDATIONS ; relcache init file inval dbid 1 tsid 1663; inval msgs: catcache 55 catcache 54 catcache 55 catcache 54 relcache 2696 relcache 2619 rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/015766D0, prev 0/01576640, desc: RUNNING_XACTS nextXid 749 latestCompletedXid 748 oldestRunningXid 749 rmgr: XLOG len (rec/tot): 30/ 30, tx: 0, lsn: 0/01576708, prev 0/015766D0, desc: CHECKPOINT_REDO wal_level replica rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/01576728, prev 0/01576708, desc: RUNNING_XACTS nextXid 749 latestCompletedXid 748 oldestRunningXid 749 rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/01576760, prev 0/01576728, desc: CHECKPOINT_ONLINE redo 0/1576708; tli 1; prev tli 1; fpw true; wal_level replica; xid 0:749; oid 24576; multi 1; offset 0; oldest xid 730 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 749; online rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/015767D8, prev 0/01576760, desc: RUNNING_XACTS nextXid 749 latestCompletedXid 748 oldestRunningXid 749 rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/01576810, prev 0/015767D8, desc: CHECKPOINT_SHUTDOWN redo 0/1576810; tli 1; prev tli 1; fpw true; wal_level replica; xid 0:749; oid 24576; multi 1; offset 0; oldest xid 730 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 0; shutdown rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/01576888, prev 0/01576810, desc: RUNNING_XACTS nextXid 749 latestCompletedXid 748 oldestRunningXid 749 rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/015768C0, prev 0/01576888, desc: CHECKPOINT_SHUTDOWN redo 0/15768C0; tli 1; prev tli 1; fpw true; wal_level replica; xid 0:749; oid 24576; multi 1; offset 0; oldest xid 730 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 0; shutdown rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/01576938, prev 0/015768C0, desc: RUNNING_XACTS nextXid 749 latestCompletedXid 748 oldestRunningXid 749 rmgr: XLOG len (rec/tot): 30/ 30, tx: 0, lsn: 0/01576970, prev 0/01576938, desc: CHECKPOINT_REDO wal_level replica rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/01576990, prev 0/01576970, desc: RUNNING_XACTS nextXid 749 latestCompletedXid 748 oldestRunningXid 749 rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/015769C8, prev 0/01576990, desc: CHECKPOINT_ONLINE redo 0/1576970; tli 1; prev tli 1; fpw true; wal_level replica; xid 0:749; oid 24576; multi 1; offset 0; oldest xid 730 in DB 1; oldest multi 1 in DB 1; oldest/newest commit timestamp xid: 0/0; oldest running xid 749; online rmgr: Standby len (rec/tot): 50/ 50, tx: 0, lsn: 0/01576A40, prev 0/015769C8, desc: RUNNING_XACTS nextXid 749 latestCompletedXid 748 oldestRunningXid 749 rmgr: XLOG len (rec/tot): 30/ 30, tx: 0, lsn: 0/01576A78, prev 0/01576A40, desc: NEXTOID 32768 rmgr: Standby len (rec/tot): 54/ 54, tx: 0, lsn: 0/01576A98, prev 0/01576A78, desc: RUNNING_XACTS nextXid 750 latestCompletedXid 748 oldestRunningXid 749; 1 xacts: 749 rmgr: Heap len (rec/tot): 54/ 2050, tx: 749, lsn: 0/01576AD0, prev 0/01576A98, desc: INSERT off: 17, flags: 0x01, blkref #0: rel 1664/0/1260 blk 0 FPW rmgr: Btree len (rec/tot): 53/ 673, tx: 749, lsn: 0/015772D8, prev 0/01576AD0, desc: INSERT_LEAF off: 1, blkref #0: rel 1664/0/2676 blk 1 FPW rmgr: Btree len (rec/tot): 53/ 433, tx: 749, lsn: 0/01577580, prev 0/015772D8, desc: INSERT_LEAF off: 17, blkref #0: rel 1664/0/2677 blk 1 FPW rmgr: Transaction len (rec/tot): 82/ 82, tx: 749, lsn: 0/01577738, prev 0/01577580, desc: COMMIT 2025-09-12 17:04:42.905389 CST; inval msgs: catcache 11 catcache 10 postgres@LAPTOP-Q34L5TP8:~>
C:\Users\haife>where pg_waldump
C:\Program Files\PostgreSQL\17\bin\pg_waldump.exe
C:\Users\haife>pg_waldump --help
pg_waldump 为了调试,解码并显示PostgreSQL预写日志.
使用方法:
pg_waldump [选项]... [STARTSEG [ENDSEG]]
选项:
-b, --bkp-details 输出有关备份块的详细信息
-B, --block=N with --relation, only show records that modify block N
-e, --end=RECPTR 在指定的WAL位置停止读取
-f, --follow 在到达可用WAL的末尾之后,继续重试
-F, --fork=FORK only show records that modify blocks in fork FORK;
valid names are main, fsm, vm, init
-n, --limit=N 要显示的记录数
-p, --path=PATH directory in which to find WAL segment files or a
directory with a ./pg_wal that contains such files
(default: current directory, ./pg_wal, $PGDATA/pg_wal)
-q, --quiet 不打印任何输出,错误除外
-r, --rmgr=RMGR 只显示由RMGR资源管理器生成的记录
使用--rmgr=list列出有效的资源管理器名称
-R, --relation=T/D/R only show records that modify blocks in relation T/D/R
-s, --start=RECPTR 在WAL中位于RECPTR处开始阅读
-t, --timeline=TLI timeline from which to read WAL records
(default: 1 or the value used in STARTSEG)
-V, --version 输出版本信息, 然后退出
-w, --fullpage only show records with a full page write
-x, --xid=XID 只显示用给定事务ID标记的记录
-z, --stats[=record] 显示统计信息而不是记录
(或者,显示每个记录的统计信息)
--save-fullpage=DIR save full page images to DIR
-?, --help 显示此帮助, 然后退出
臭虫报告至 <pgsql-bugs@lists.postgresql.org>.
PostgreSQL 主页: <https://www.postgresql.org/>