Documentation PostgreSQL 15.15 » Annexes » Modules supplémentaires fournis » pg_walinspect

Précédent | Niveau supérieur | Suivant
F.36. pg_visibility | Sommaire | F.38. postgres_fdw

## F.37. pg_walinspect

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.

### Note

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`.

### F.37.1. Fonctions générales

`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.

### F.37.2. Auteur

Bharath Rupireddy `<bharath.rupireddyforpostgres@gmail.com>`