↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15
开发中的版本: 19 / 20devel

F.37. pg_walinspect #

pg_walinspect 模块提供一组 SQL 函数,允许在底层检查正在运行的 PostgreSQL 数据库集簇的预写式日志内容,这对于调试、分析、报表或教学用途很有帮助。它与 pg_waldump 类似,但可通过 SQL 访问,而不是通过独立工具。

该模块的所有函数都基于服务器当前时间线 ID 提供 WAL 信息。

本模块的所有函数都会尝试查找位于给定 in_lsn 或 start_lsn 处或其后的第一条有效 WAL 记录;若找不到这样的记录,则会报错。同样,end_lsn 也必须可用;如果它位于一条记录的中间,则整条记录都必须可用。

注意

某些函数(例如 pg_logical_emit_message)返回刚插入的记录之后的 LSN。因此,如果将该 LSN 作为 in_lsn 或 start_lsn 传给这些函数之一,返回的将是下一条记录。

默认情况下,这些函数仅允许超级用户和 pg_read_server_files 角色成员使用。超级用户可通过 GRANT 向其他用户授予访问权限。

F.37.1. 通用函数 #

pg_get_wal_record_info(in_lsn pg_lsn) returns record #

获取给定 LSN 处的 WAL 记录信息。如果给定 LSN 不在 WAL 记录的起始位置,则返回下一条可用的有效 WAL 记录的信息;若找不到这样的记录,则会报错。例如,该函数的用法如下:

postgres=# SELECT * FROM pg_get_wal_record_info('0/1E826E98');
-[ RECORD 1 ]----+----------------------------------------------------
start_lsn        | 0/1E826F20
end_lsn          | 0/1E826F60
prev_lsn         | 0/1E826C80
xid              | 0
resource_manager | Heap2
record_type      | PRUNE
record_length    | 58
main_data_length | 8
fpi_length       | 0
description      | snapshotConflictHorizon 33748 nredirected 0 ndead 2
block_ref        | blkref #0: rel 1663/5/60221 fork main blk 2

pg_get_wal_records_info(start_lsn pg_lsn, end_lsn pg_lsn) returns setof record #

获取 start_lsn 与 end_lsn 之间所有有效 WAL 记录的信息。每条 WAL 记录返回一行。如果 start_lsn 或 end_lsn 尚不可用,则函数会报错。例如:

postgres=# SELECT * FROM pg_get_wal_records_info('0/1E913618', '0/1E913740') LIMIT 1;
-[ RECORD 1 ]----+--------------------------------------------------------------
start_lsn        | 0/1E913618
end_lsn          | 0/1E913650
prev_lsn         | 0/1E9135A0
xid              | 0
resource_manager | Standby
record_type      | RUNNING_XACTS
record_length    | 50
main_data_length | 24
fpi_length       | 0
description      | nextXid 33775 latestCompletedXid 33774 oldestRunningXid 33775
block_ref        |

pg_get_wal_records_info_till_end_of_wal(start_lsn pg_lsn) returns setof record #

此函数与 pg_get_wal_records_info() 相同,但获取的是从 start_lsn 到 WAL 末尾之间所有有效 WAL 记录的信息。

pg_get_wal_stats(start_lsn pg_lsn, end_lsn pg_lsn, per_record boolean DEFAULT false) returns setof record #

获取 start_lsn 与 end_lsn 之间所有有效 WAL 记录的统计信息。默认按每种 resource_manager 类型返回一行。当 per_record 设为 true 时,则按每种 record_type 返回一行。如果 start_lsn 或 end_lsn 尚不可用,则函数会报错。例如:

postgres=# SELECT * FROM pg_get_wal_stats('0/1E847D00', '0/1E84F500')
           WHERE count > 0 AND
                 "resource_manager/record_type" = 'Transaction'
           LIMIT 1;
-[ RECORD 1 ]----------------+-------------------
resource_manager/record_type | Transaction
count                        | 2
count_percentage             | 8
record_size                  | 875
record_size_percentage       | 41.23468426013195
fpi_size                     | 0
fpi_size_percentage          | 0
combined_size                | 875
combined_size_percentage     | 2.8634072910530795

pg_get_wal_stats_till_end_of_wal(start_lsn pg_lsn, per_record boolean DEFAULT false) returns setof record #

此函数与 pg_get_wal_stats() 相同,但获取的是从 start_lsn 到 WAL 末尾之间所有有效 WAL 记录的统计信息。

F.37.2. 作者 #

Bharath Rupireddy

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.