Documentation PostgreSQL 15.15 » Internes » Protocole Frontend/Backend » Formats des messages de la réplication logique

Précédent | Niveau supérieur | Suivant
55.8. Champs des messages d'erreur et de notification | Sommaire | 55.10. Résumé des changements depuis le protocole 2.0

## 55.9. Formats des messages de la réplication logique

Cette section décrit le format détaillé de chaque message de réplication logique. Ces messages sont renvoyés soit par l'interface SQL du slot de réplication soit par un walsender. Dans ce dernier cas, ils sont encapsulés à l'intérieur de messages WAL du protocole de réplication, comme décrit dans Section 55.4, et obéissent généralement au même flux de message que la réplication physique.

Begin
  Byte1('B')

    Identifie le message comme un message begin.

  Int64 (XLogRecPtr)

    Le LSN final de la transaction.

  Int64 (TimestampTz)

    Horodatage de la validation de la transaction. La valeur est un nombre de microsecondes depuis l'epoch PostgreSQL (1er janvier 2000).

  Int32 (TransactionId)

    Xid de la transaction.

Message
  Byte1('M')

    Identifie le message comme un message de décodage logique.

  Int32 (TransactionId)

    Xid de la transaction (seulement présent pour les transactions en flux). Ce champ est disponible depuis la version 2 du protocole.

  Int8

    Drapeaux ; soit 0 pour aucun drapeau, ou 1 si le message de décodage logique est transactionnel.

  Int64 (XLogRecPtr)

    Le LSN du message de décodage logique.

  String

    Le préfixe du message de décodage logique.

  Int32

    Longueur du contenu.

  Byte`n`

    Le contenu du message de décodage logique.

Commit
  Byte1('C')

    Identifie le message comme un message de Commit.

  Int8(0)

    Drapeaux ; actuellement inutilisé.

  Int64 (XLogRecPtr)

    Le LSN du commit.

  Int64 (XLogRecPtr)

    Le LSN de fin de la transaction.

  Int64 (TimestampTz)

    Horodatage de la validation de la transaction. La valeur est en nombre de microsecondes depuis l'epoch PostgreSQL (1er janvier 2000).

Origin
  Byte1('O')

    Identifie le message comme un message Origin.

  Int64 (XLogRecPtr)

    Le LSN de la validation sur le serveur d'origine.

  String

    Nom de l'origine.

  Notez qu'il peut y avoir plusieurs messages Origin dans une même transaction.

Relation
  Byte1('R')

    Identifie le message comme un message Relation.

  Int32 (TransactionId)

    XID de la transaction (seulement présent pour les transactions en flux). Ce champ est disponible à partir de la version 2 du protocole.

  Int32 (Oid)

    OID de la relation.

  String

    Schéma (chaîne vide pour `pg_catalog`).

  String

    Nom de la relation.

  Int8

    Configuration de l'identité de réplication pour la relation (identique à `relreplident` dans `pg_class`).

  Int16

    Nombre de colonnes.

  Ensuite, la partie suivante du message apparaît pour chaque colonne inclus dans la publication, à l'exception des colonnes générées :

  Int8

    Drapeaux pour la colonne. Actuellement, peut valoir soit 0 pour aucun drapeau ou 1 pour marquer la colonne comme faisant partie de la clé.

  String

    Nom de la colonne.

  Int32 (Oid)

    OID du type de données de la colonne.

  Int32

    Modifieur de type de la colonne (`atttypmod`).

Type
  Byte1('Y')

    Identifie le message comme un message Type.

  Int32 (TransactionId)

    XID de la transaction (seulement présent pour les transactions en flux). Ce champ est disponible depuis la version 2 du protocole.

  Int32 (Oid)

    OID du type de données.

  String

    Schéma (chaîne vide pour `pg_catalog`).

  String

    Nom du type de données.

Insert
  Byte1('I')

    Identifie le message comme un message Insert.

  Int32 (TransactionId)

    XID de la transaction (seulement présent pour les transactions en flux). Ce champ est disponible depuis la version 2 du protocole.

  Int32 (Oid)

    OID de la relation correspondant à l'identifiant du message Relation message.

  Byte1('N')

    Identifie le message TupleData suivant comme une nouvelle ligne.

  TupleData

    Message TupleData représentant le contenu de la nouvelle ligne.

Update
  Byte1('U')

    Identifie le message comme un message Update.

  Int32 (TransactionId)

    XID de la transaction (seulement présent pour les transactions en flux). Ce champ est disponible depuis la version 2 du protocole.

  Int32 (Oid)

    OID de la relation correspondant à l'identifiant du message Relation message.

  Byte1('K')

    Identifie les sous-messages TupleData suivants comme une clé. Ce champ est optionnel et est présent uniquement si la mise à jour a modifié des données dans une des colonnes qui font partie de l'index REPLICA IDENTITY.

  Byte1('O')

    Identifie les sous-messages TupleData suivants comme une ancienne ligne. Ce champ est optionnel et est présent uniquement si la table ciblée par la mise à jour a REPLICA IDENTITY configuré à FULL.

  TupleData

    Message TupleData représentant le contenu de l'ancienne ligne ou la clé primaire. Seulement présent si la partie 'O' ou 'K' précédente est présente.

  Byte1('N')

    Identifie le message TupleData suivant comme la nouvelle ligne.

  TupleData

    Message TupleData représentant le contenu de la nouvelle ligne.

  Le message Update peut contenir soit une partie d'un message 'K' soit une partie d'un message 'O', mais jamais les deux.

Delete
  Byte1('D')

    Identifie le message comme un message Delete.

  Int32 (TransactionId)

    XID de la transaction (seulement présent pour les transactions en flux). Ce champ est disponible depuis la version 2 du protocole.

  Int32 (Oid)

    OID de la relation correspondant ç l'identifiant du message Relation message.

  Byte1('K')

    Identifie le sous-message TupleData suivant comme une clé. Ce champ est présent si la table ciblée par la suppression utilise un index comme REPLICA IDENTITY.

  Byte1('O')

    Identifie le message TupleData suivant comme une ancienne ligne. Ce champ est présent si la table ciblée par la suppression a le REPLICA IDENTITY configuré à FULL.

  TupleData

    Message TupleData représentant le contenu de l'ancienne ligne ou clé primaire, suivant le champ précédent.

  Le message Delete pourrait contenir soit une partie d'un message 'K' soit une partie d'un message 'O', mais jamais les deux.

Truncate
  Byte1('T')

    Identifie le message comme un message Truncate.

  Int32 (TransactionId)

    XID de la transaction (seulement présent pour les transactions en flux). Ce champ est disponible depuis la version 2 du protocole.

  Int32

    Nombre de relations.

  Int8

    Options pour `TRUNCATE` : 1 pour `CASCADE`, 2 pour `RESTART IDENTITY`

  Int32 (Oid)

    OID de la relation correspondant à l'identifiant du message Relation. Ce champ est répété pour chaque relation.

Les messages suivants (Stream Start, Stream Stop, Stream Commit et Stream Abort) sont disponibles depuis la version 2 du protocole.

Stream Start
  Byte1('S')

    Identifie le message comme un message de début de flux.

  Int32 (TransactionId)

    Xid de la transaction.

  Int8

    Une valeur de 1 indique qu'il s'agit du premier segment pour cet XID, et une valeur de 0 pour tout autre segment de flux.

Stream Stop
  Byte1('E')

    Identifie le message comme un message d'arrêt de flux.

Stream Commit
  Byte1('c')

    Identifie le message comme un message de validation du flux.

  Int32 (TransactionId)

    XID de la transaction.

  Int8(0)

    Drapeaux ; actuellement inutilisé.

  Int64 (XLogRecPtr)

    Le LSN de la validation.

  Int64 (XLogRecPtr)

    Le LSN final de la transaction.

  Int64 (TimestampTz)

    Horodatage de la validation de la transaction. La valeur est un nombre de microsecondes depuis l'epoch PostgreSQL (1er janvier 2000).

Stream Abort
  Byte1('A')

    Identifie le message comme un message d'annulation de flux.

  Int32 (TransactionId)

    XID de la transaction.

  Int32 (TransactionId)

    XID de la sous-transaction (identique à l'XID de la transaction pour les transactions haut niveau).

Les messages suivants (Begin Prepare, Prepare, Commit Prepared, Rollback Prepared, Stream Prepare) sont disponibles depuis la version 3 du protocole.

Begin Prepare
  Byte1('b')

    Identifie le message comme le début d'une transaction préparée.

  Int64 (XLogRecPtr)

    Le LSN de la préparation de la transaction.

  Int64 (XLogRecPtr)

    Le LSN final de la transaction préparée.

  Int64 (TimestampTz)

    Horodatage de la phase de préparation de la transaction. La valeur est en nombre de microsecondes depuis l'epoch PostgreSQL (1er janvier 2000).

  Int32 (TransactionId)

    XID de la transaction.

  String

    Le GID défini par l'utilisateur pour la transaction préparée.

Prepare
  Byte1('P')

    Identifie le message comme un message de transaction préparée.

  Int8(0)

    Drapeaux ; actuellement inutilisé.

  Int64 (XLogRecPtr)

    Le LSN de la préparation.

  Int64 (XLogRecPtr)

    Le LSN final de la transaction préparée.

  Int64 (TimestampTz)

    Horodatage de la phase de préparation de la transaction. La valeur est en nombre de microsecondes depuis l'epoch PostgreSQL (1er janvier 2000).

  Int32 (TransactionId)

    XID de la transaction.

  String

    Le GID défini par l'utilisateur pour la transaction préparée.

Commit Prepared
  Byte1('K')

    Identifie le message comme le message de validation d'une transaction préparée.

  Int8(0)

    Drapeaux ; actuellement inutilisé.

  Int64 (XLogRecPtr)

    Le LSN de la validation de la transaction préparée.

  Int64 (XLogRecPtr)

    Le LSN final de la validation de la transaction préparée.

  Int64 (TimestampTz)

    Horodatage de la validation de la transaction. La valeur est en nombre de microsecondes depuis l'epoch PostgreSQL (1er janvier 2000).

  Int32 (TransactionId)

    XID de la transaction.

  String

    Le GID défini par l'utilisateur pour la transaction préparée.

Rollback Prepared
  Byte1('r')

    Identifie le message comme le message d'annulation d'une transaction préparée.

  Int8(0)

    Drapeaux ; actuellement inutilisé.

  Int64 (XLogRecPtr)

    Le LSN final de la transaction préparée.

  Int64 (XLogRecPtr)

    Le LSN final de la transaction préparée annulée.

  Int64 (TimestampTz)

    Horodatage de la phase de préparation de la transaction. La valeur est en nombre de microsecondes depuis l'epoch PostgreSQL (1er janvier 2000).

  Int64 (TimestampTz)

    Horodatage de la phase d'annulation de la transaction. La valeur est en nombre de microsecondes depuis l'epoch PostgreSQL (1er janvier 2000).

  Int32 (TransactionId)

    XID de la transaction.

  String

    Le GID défini par l'utilisateur pour la transaction préparée.

Stream Prepare
  Byte1('p')

    Identifie le message comme un message de préparation en flux 2PC.

  Int8(0)

    Drapeaux ; actuellement inutilisé.

  Int64 (XLogRecPtr)

    Le LSN de la phase de préparation.

  Int64 (XLogRecPtr)

    Le LSN final de la transaction préparée.

  Int64 (TimestampTz)

    Horodatage de la phase de préparation de la transaction. La valeur est en nombre de microsecondes depuis l'epoch PostgreSQL (1er janvier 2000).

  Int32 (TransactionId)

    XID de la transaction.

  String

    Le GID défini par l'utilisateur pour la transaction préparée.

Les parties de message suivants sont partagées par les messages ci-dessus.

TupleData
  Int16

    Nombre de colonnes.

  Ensuite, un des sous-messages suivants apparaît pour chaque colonne, à l'exception des colonnes générées) :

  Byte1('n')

    Identifie la donnée comme une valeur NULL.

  ou

  Byte1('u')

    Identifie la valeur TOAST non modifiée (la valeur réelle n'est pas envoyée).

  ou

  Byte1('t')

    Identifie la donnée comme une valeur formatée en texte.

  ou

  Byte1('b')

    Identifie la donnée comme une valeur formatée en binaire.

  Int32

    Longueur de la valeur de la colonne.

  Byte`n`

    La valeur de la colonne, en format soit binaire soit texte. (Comme spécifié dans l'octet de format précédent.) `n` est la longueur ci-dessus.