Le module pg_walinspect fournit des fonctions SQL qui
vous permettent d'inspecter, à un bas niveau, le contenu des journaux de
transactions d'une instance PostgreSQL en cours
d'exécution, ce qui est utile pour le débogage, l'analyse, la création de
rapports ou à des fins pédagogiques. Il est similaire à pg_waldump,
mais est accessible via SQL plutôt que via un utilitaire séparé.
Toutes les fonctions de ce module fourniront des informations sur les WAL utilisant l'identifiant de la timeline actuelle du serveur.
Toutes les fonctions de ce module essaieront de trouver le premier
enregistrement WAL valide qui est situé à l'endroit ou après le
in_lsn ou le start_lsn
donné et émettra une erreur si un tel enregistrement n'est pas présent.
De même, end_lsn doit être présent, et s'il
tombe au milieu d'un enregistrement, l'intégralité de l'enregistrement doit
être disponible.
Certaines fonctions, telles que pg_logical_emit_message,
renvoient le LSN après l'enregistrement qui vient d'être
inséré. Par conséquent, si vous transmettez ce LSN comme in_lsn
ou start_lsn à l'une de ces fonctions, elle
renverra l'enregistrement suivant.
Par défaut, l'utilisation de ces fonctions est réservée aux superutilisateurs
et aux membres du rôle pg_read_server_files. L'accès peut
être accordé par des superutilisateurs à d'autres utilisateurs grâce à la
commande GRANT.
pg_get_wal_record_info(in_lsn pg_lsn) returns record
Obtient les informations d'enregistrement WAL pour un LSN donné. Si le LSN fourni n'est pas au début d'un enregistrement WAL, elle retourne les informations du prochain enregistrement WAL valide disponible ; ou une erreur si aucun enregistrement de ce type n'est trouvé. Voici un exemple de l'utilisation de cette fonction :
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)
Obtient des informations sur tous les enregistrements WAL valides entre
start_lsn et end_lsn.
Renvoie une ligne par enregistrement WAL. Si start_lsn
ou end_lsn ne sont pas encore disponibles, la
fonction renvoie une erreur. Par exemple :
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
Cette fonction est identique à pg_get_wal_records_info()
sauf qu'elle obtient des informations sur tous les enregistrements WAL
valides depuis start_lsn jusqu'à la fin du WAL.
pg_get_wal_stats(start_lsn pg_lsn, end_lsn pg_lsn, per_record boolean DEFAULT false)
returns setof record
Récupère les statistiques de tous les enregistrements WAL valides entre
start_lsn et end_lsn.
Par défaut, elle renvoie une ligne par type resource_manager.
Lorsque per_record est défini sur true,
elle renvoie une ligne par record_type.
Si start_lsn ou end_lsn
ne sont pas encore disponibles, la fonction retourne une erreur.
Par exemple :
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
Cette fonction est identique à pg_get_wal_stats()
sauf qu'elle obtient les statistiques de tous les enregistrements WAL
valides depuis start_lsn jusqu'à la fin du WAL.
Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>