9.3 9.4 9.5 9.6 10 11 12 13 14 15
阿里云PostgreSQL 问题报告 纠错本页面

F.37. pg_walinspect

F.37.1. 通用函数
F.37.2. 作者

pg_walinspect模块提供了SQL函数,允许您检查运行中的PostgreSQL数据库集群的预写式日志的内容,这对于调试、分析、报告或教育目的非常有用。它类似于pg_waldump,但是通过SQL而不是单独的实用程序访问。

所有这个模块的函数将使用当前服务器的时间线ID提供WAL信息。

该模块的所有函数将尝试查找给定in_lsnstart_lsn之后或等于的第一个有效WAL记录,并在没有这样的记录时发出错误。 同样,end_lsn必须可用,如果它落在记录的中间,则整个记录必须可用。

注意

一些函数,比如pg_logical_emit_message, 在刚插入记录后返回LSN之后。因此,如果你将该LSN作为 in_lsnstart_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_lsnend_lsn之间所有有效WAL记录的信息。 每个WAL记录返回一行。如果start_lsnend_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_lsnend_lsn之间所有有效WAL记录的统计信息。 默认情况下,每个resource_manager类型返回一行。 当per_record设置为true时,每个record_type返回一行。 如果start_lsnend_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