Réplication logique
PostgreSQL 10 introduit la réplication logique native, qui repose sur un modèle de publication/abonnement : il est ainsi possible de créer des publications en amont (ou côté éditeur) et des abonnements en aval (ou côté abonné). Pour plus de détails à ce sujet, veuillez consulter la documentation PostgreSQL.
Dans ce chapitre, nous utiliserons un cluster à 2 nœuds pour démontrer la réplication logique native de
PostgreSQL 10. Notez que sur chaque instance PostgreSQL, vous devez configurer wal_level = logical
et également vous assurer d’ajuster le fichier pg_hba.conf pour accorder l’accès en
replication entre les 2 nœuds.
Créer un environnement de test
Mettez en place deux instances PostgreSQL 10+ comme vous le souhaitez (Docker, une machine virtuelle, ou même deux bases de données sur la même machine) et configurez les paramètres ci-dessus sur chacune d’elles.
Se connecter aux deux nœuds
Utilisons OmniDB pour nous connecter aux deux nœuds PostgreSQL. Tout d’abord, renseignez les informations de connexion dans la grille des connexions :

Sélectionnez ensuite les deux connexions. Remarquez comment OmniDB comprend qu’il est connecté à PostgreSQL 10 et active un nouveau nœud dans l’arborescence de la connexion en cours : il s’appelle Logical Replication (Réplication logique). À l’intérieur, on trouve Publications et Subscriptions (Abonnements).

Créer une table de test sur les deux nœuds
Sur les deux nœuds, créez une table comme celle-ci :
CREATE TABLE customers (
login text PRIMARY KEY,
full_name text NOT NULL,
registration_date timestamptz NOT NULL DEFAULT now()
)

Créer une publication sur la première machine
Dans le nœud de connexion, développez le nœud Logical Replication, puis faites un clic droit sur le
nœud Publications, et choisissez l’action Create Publication (Créer une publication). OmniDB
ouvre un onglet avec un modèle SQL contenant la commande CREATE PUBLICATION, prêt à être ajusté et
exécuté :

Après avoir ajusté et exécuté la commande, vous pouvez faire un clic droit sur le nœud Publications et cliquer à nouveau sur l’action Refresh (Actualiser). Vous verrez qu’un nouveau nœud portant le même nom que celui donné à la publication a été créé. En développant ce nœud, vous verrez les détails et les tables de la publication :

Créer un abonnement sur la seconde machine
Dans le nœud de connexion, développez le nœud Logical Replication, puis faites un clic droit sur le
nœud Subscriptions, et choisissez l’action Create Subscription (Créer un abonnement). OmniDB
ouvre un onglet avec un modèle SQL contenant la commande CREATE SUBSCRIPTION, prêt à être ajusté et
exécuté :

Après avoir ajusté et exécuté la commande, vous pouvez faire un clic droit sur le nœud Subscriptions et cliquer à nouveau sur l’action Refresh. Vous verrez qu’un nouveau nœud portant le même nom que celui donné à l’abonnement a été créé. En développant ce nœud, vous verrez les détails, les publications référencées et les tables de l’abonnement :

De plus, la commande CREATE SUBSCRIPTION a créé un slot de réplication logique appelé
testsub (le même nom que l’abonnement) sur la première machine :

Tester la réplication logique
Pour vérifier que la réplication fonctionne, créons quelques données sur le nœud 1. Faites un clic droit sur
la table public.customers, pointez vers Data Actions (Actions sur les données), puis
cliquez sur l’action Edit Data (Modifier les données). Dans cette grille, vous pouvez ajouter, modifier
et supprimer des données de la table. Ajoutez 2 lignes d’exemple, comme ceci :

Ensuite, sur l’autre nœud, vérifiez si la table public.customers a été peuplée automatiquement.
Faites un clic droit sur la table public.customers, pointez vers Data Actions, puis
cliquez sur l’action Query Data (Interroger les données) :

Comme on peut le voir, les deux lignes créées sur la première machine ont été répliquées sur la seconde machine. Cela indique que la réplication logique fonctionne.
Vous pouvez maintenant effectuer d’autres actions, comme ajouter/retirer des tables de la publication ou créer une nouvelle publication qui publie toutes les tables.