Cette section décrit le format détaille 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 52.6 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 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.
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 :
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.
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.
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.
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.
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.
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 :
Identifie la donnée comme une valeur NULL.
Or
Identifies une valeur TOAST non modifiée (la valeur réelle n'est pas envoyée).
Or
Identifie la donnée comme une valeur formatée en texte.
Longueur de la valeur de la colonne.
n
La valeur de la colonne au format texte. (Une prochaine version
pourrait supporter des formats supplémentaires.)
n
est la longueur ci-dessus.