Documentation PostgreSQL 14.22 » Internes » Protocole client/serveur » Formats des messages de la réplication logique

Précédent | Niveau supérieur | Suivant
53.8. Champs des messages d'erreur et d'avertissement | Sommaire | 53.10. Résumé des modifications depuis le protocole 2.0

## 53.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 des slots de réplication, soit par un walsender. Dans le cas d'un walsender, ils sont encapsulés dans les messages WAL du protocole de réplication comme décrits dans Section 53.4 et obéissent généralement au même flux de message que celui de la réplication physique.

Begin

  Byte1('B')

    Identifie le message comme un message begin.

  Int64

    Le LSN final de la transaction.

  Int64

    Horodatage de la validation de la transaction. La valeur est le nombre de microsecondes depuis l'epoch PostgreSQL (2000-01-01).

  Int32

    Xid de la transaction.

Message

  Byte1('M')

    Identifie le message comme un message décodé logiquement.

  Int32

    Xid de la transaction (présent seulement pour les transactions diffusées). Ce champs est disponible à partir de la version 2 du protocole.

  Int8

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

  Int64

    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 validation (commit).

  Int64

    Le LSN de la validation.

  Int64

    Le LSN final de la transaction.

  Int64

    Horodatage de la validation de la transaction. La valeur est le nombre de microsecondes depuis l'epoch PostgreSQL (2000-01-01).

Origin

  Byte1('O')

    Identifie le message comme un message d'origine.

  Int64

    Le LSN de la validation sur le serveur origine.

  String

    Nom de l'origine.

  Notez qu'il peut y avoir plusieurs messages Origin à l'intérieur d'une simple transaction.

Relation

  Byte1('R')

    Identifie le message comme un message relation.

  Int32

    Xid de la transaction (présent uniquement pour les transactions par flux). Ce champ est disponible à partir de la version 2 du protocole.

  Int32

    ID de la relation.

  String

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

  String

    Nom de la relation.

  Int8

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

  Int16

    Nombre de colonnes.

  Ensuite, la partie suivante du message apparaît pour chaque colonne (excepté les colonnes générées) :

  Int8

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

  String

    Nom de la colonne.

  Int32

    ID 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

    Xid de la transaction (présent uniquement pour les transactions par flux). Ce champs est disponible à partir de la version 2 du protocole.

  Int32

    ID 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

    Xid de la transaction (présent uniquement pour les transactions par flux). Ce champs est disponible à partir de la version 2 du protocole.

  Int32

    ID de la relation correspondant à l'ID dans le message relation.

  Byte1('N')

    Identifie le message suivant TupleData comme une nouvelle ligne.

  TupleData

    Partie du message TupleData représentant le contenu de la nouvelle ligne.

Update

  Byte1('U')

    Identifie le message comme un message update.

  Int32

    Xid de la transaction (présent uniquement pour les transactions par flux). Ce champs est disponible à partir de la version 2 du protocole.

  Int32

    ID de la relation correspondant à l'ID dans le message relation.

  Byte1('K')

    Identifie le sous-message TupleData suivant comme une clé. Ce champ est optionnel et seulement présent si la mise à jour a modifié des données dans une colonne faisant partie d'un index REPLICA IDENTITY.

  Byte1('O')

    Identifie le sous-message TupleData suivant comme une ancienne ligne. Ce champ est optionnel et est seulement présent si la table dans laquelle la mise à jour est survenue a REPLICA IDENTITY configuré à FULL.

  TupleData

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

  Byte1('N')

    Identifie le message TupleData suivant comme une nouvelle ligne.

  TupleData

    Partie du message TupleData représentant le contenu de la nouvelle ligne

  Le message Update peut contenir soit une partie message 'K' ou une partie message 'O' ou ni l'un ni l'autre, mais jamais les deux.

Delete

  Byte1('D')

    Identifie le message comme un message delete.

  Int32

    Xid de la transaction (présent uniquement pour les transactions par flux). Ce champs est disponible à partir de le version 2 du protocole.

  Int32

    ID de la relation correspondant à l'ID dans le message relation.

  Byte1('K')

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

  Byte1('O')

    Identifie le message TupleData suivant comme ancienne ligne. Ce champ est présent si la table dans laquelle la suppression est survenue a REPLICA IDENTITY configuré à FULL.

  TupleData

    La partie du message TupleData représentant le contenu de l'ancienne ligne ou la clé primaire, suivant le champ précédent.

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

Truncate

  Byte1('T')

    Identifie le message comme un message de troncation.

  Int32

    Xid de la transaction (présent uniquement pour les transactions par flux). Ce champs est disponible à partir de la version 2 du protocole.

  Int32

    Nombre de relations

  Int8

    Bits en option pour `TRUNCATE`: 1 pour `CASCADE`, 2 pour `RESTART IDENTITY`

  Int32

    ID de la relation correspondant à l'ID dans le message de relation. Ce champ est répété pour chaque relation.

Les message suivants (Stream Start, Stream Stop, Stream Commit, et Stream Abort) sont disponibles à partir de la version 2 du protocole.

Stream Start

  Byte1('S')

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

  Int32

    Xid de la transaction.

  Int8

    Une valeur de 1 indique que c'est le premier segment de flux pour ce XID, 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 commit de diffusion.

  Int32

    Xid de la transaction.

  Int8

    Drapeaux ; actuellement inutilisés (doit être 0).

  Int64

    Le LSN du commit.

  Int64

    Le LSN de fin de transaction.

  Int64

    L'horodatage du commit de la transaction. La valeur est un nombre de microsecondes depuis l'époch PostgreSQL (2000-01-01).

Stream Abort

  Byte1('A')

    Identifie le message comme un message d'annulation de flux

  Int32

    Xid de la transaction.

  Int32

    + Xid de la sous-transaction (sera le même que le xid de la transaction pour les transactions de niveau opérationnel).

Les parties suivantes du message sont partagées par les messages ci-dessus.

TupleData

  Int16

    Nombre de colonnes.

  Ensuite, un des sous-messages suivants apparaît pour chaque colonne (excepté les colonnes générées) :

  Byte1('n')

    Identifie la donnée comme une valeur NULL.

  Ou

  Byte1('u')

    Identifie une 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 au format binaire ou texte (suivant l'octet de format précédent). `n` est la longueur ci-dessus.