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>