pg_walinspectモジュールは、実行中のPostgreSQLデータベースクラスタの先行書き込みログの内容を低レベルで検査することを可能にするSQL関数を提供します。
これはデバッグ、分析、報告、教育目的に有用です。
pg_waldumpと似ていますが、独立したユーティリティではなくSQLを通してアクセスできます。
このモジュールのすべての関数は、現在のサーバのタイムラインIDを使ってWAL情報を提供します。
このモジュールのすべての関数は、指定されたin_lsnまたはstart_lsn以降の最初の有効なWALレコードを見つけようとします。
そのようなレコードがない場合はエラーを出力します。
同様に、end_lsnが利用可能でなければならず、レコードの途中にある場合は、レコード全体が利用可能でなければなりません。
pg_logical_emit_messageなどの一部の関数は、挿入されたばかりのレコードの後のLSNを返します。
したがって、そのLSNをin_lsnまたはstart_lsnとしてこれらの関数の1つに渡すと、nextレコードを返します。
デフォルトでは、これらの関数の使用はスーパーユーザと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レコードごとに1行を返します。
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
この関数は、start_lsnからWALの終了までの全ての有効なWALレコードの情報を取得する点を除いてpg_get_wal_records_info()と同じです。
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タイプごとに1行を返します。
per_recordがtrueに設定されている場合、record_typeごとに1行を返します。
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>