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授予其他用户访问权限。
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记录的统计信息。
Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>