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>