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.
Identifie le message comme un message begin.
Le LSN final de la transaction.
Horodatage de la validation de la transaction. La valeur est le nombre de microsecondes depuis l'epoch PostgreSQL (2000-01-01).
Xid de la transaction.
Identifie le message comme un message décodé logiquement.
Xid de la transaction (présent seulement pour les transactions diffusées). Ce champs est disponible à partir de la version 2 du protocole.
Drapeaux ; soit 0 pour aucun drapeau soit 1 si le message de décodage logique est transactionnel.
Le LSN du message de décodage logique.
Le préfixe du message de décodage logique.
Longueur du contenu.
n
Le contenu du message de décodage logique.
Identifie le message comme un message de validation (commit).
Le LSN de la validation.
Le LSN final de la transaction.
Horodatage de la validation de la transaction. La valeur est le nombre de microsecondes depuis l'epoch PostgreSQL (2000-01-01).
Identifie le message comme un message d'origine.
Le LSN de la validation sur le serveur origine.
Nom de l'origine.
Notez qu'il peut y avoir plusieurs messages Origin à l'intérieur d'une simple transaction.
Identifie le message comme un message relation.
Xid de la transaction (présent uniquement pour les transactions par flux). Ce champ est disponible à partir de la version 2 du protocole.
ID de la relation.
Schéma (chaîne vide pour pg_catalog
).
Nom de la relation.
Configuration de l'identité du réplicat pour la relation
(identique à relreplident
dans
pg_class
).
Nombre de colonnes.
Ensuite, la partie suivante du message apparaît pour chaque colonne (excepté les colonnes générées) :
Drapeaux pour la colonne. Actuellement, soit 0 pour aucun drapeau, soit 1 pour marquer la colonne comme faisant partie de la clé.
Nom de la colonne.
ID du type de données de la colonne.
Modifieur de type de la colonne (atttypmod
).
Identifie le message comme un message type.
Xid de la transaction (présent uniquement pour les transactions par flux). Ce champs est disponible à partir de la version 2 du protocole.
ID du type de données.
Schéma (chaîne vide pour pg_catalog
).
Nom du type de données.
Identifie le message comme un message insert.
Xid de la transaction (présent uniquement pour les transactions par flux). Ce champs est disponible à partir de la version 2 du protocole.
ID de la relation correspondant à l'ID dans le message relation.
Identifie le message suivant TupleData comme une nouvelle ligne.
Partie du message TupleData représentant le contenu de la nouvelle ligne.
Identifie le message comme un message update.
Xid de la transaction (présent uniquement pour les transactions par flux). Ce champs est disponible à partir de la version 2 du protocole.
ID de la relation correspondant à l'ID dans le message relation.
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.
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.
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.
Identifie le message TupleData suivant comme une nouvelle ligne.
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.
Identifie le message comme un message delete.
Xid de la transaction (présent uniquement pour les transactions par flux). Ce champs est disponible à partir de le version 2 du protocole.
ID de la relation correspondant à l'ID dans le message relation.
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.
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.
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.
Identifie le message comme un message de troncation.
Xid de la transaction (présent uniquement pour les transactions par flux). Ce champs est disponible à partir de la version 2 du protocole.
Nombre de relations
Bits en option pour TRUNCATE
:
1 pour CASCADE
, 2 pour RESTART IDENTITY
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.
Identifie le message comme un message de début de flux.
Xid de la transaction.
Une valeur de 1 indique que c'est le premier segment de flux pour ce XID, 0 pour tout autre segment de flux.
Identifie le message comme un message d'arrêt de flux.
Identifie le message comme un message de commit de diffusion.
Xid de la transaction.
Drapeaux ; actuellement inutilisés (doit être 0).
Le LSN du commit.
Le LSN de fin de transaction.
L'horodatage du commit de la transaction. La valeur est un nombre de microsecondes depuis l'époch PostgreSQL (2000-01-01).
Identifie le message comme un message d'annulation de flux
Xid de la transaction.
+ 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.
Nombre de colonnes.
Ensuite, un des sous-messages suivants apparaît pour chaque colonne (excepté les colonnes générées) :
Identifie la donnée comme une valeur NULL.
Ou
Identifie une valeur TOAST non modifiée (la valeur réelle n'est pas envoyée).
Ou
Identifie la donnée comme une valeur formatée en texte.
Ou
Identifie la donnée comme une valeur formatée en binaire.
Longueur de la valeur de la colonne.
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.