Cet article est la suite d’une série d’articles sur la réplication logique dans la version 10 de PostgreSQL :

  1. PostgreSQL 10 et la réplication logique – Fonctionnement
  2. PostgreSQL 10 et la réplication logique – Mise en oeuvre

 

Celui-ci va porter sur la mise en œuvre de la réplication logique.

Installation

Lors de la rédaction de cet article la version 10 n’est pas encore sortie. Cependant la communauté met à disposition les paquets des versions bêtas. Bien entendu, à ne pas utiliser en production.

Installation du dépôt pgdg (PostgreSQL Developpement Group)

Il suffit d’aller sur le site http://www.postgresql.org puis « download » -> « debian ». Sur cette page, le site vous indique la marche à suivre pour installer le dépôt du pgdg. Cependant il ne va vous proposer que les versions stables. Mais, le site vous renvoie vers une page du wiki :

For more information about the apt repository, including answers to frequent questions, please see the apt page on the wiki.

Sur la page wiki vous trouverez :

For packages of development/alpha/beta versions of PostgreSQL, see the FAQ entry about beta versions.

Qui vous indique :

To use packages of postgresql-10, you need to add the 10 component to your /etc/apt/sources.list.d/pgdg.list entry, so the 10 version of libpq5 will be available for installation

Donc pour debian, les commandes se résument à :

Installation des paquets

Création des instances

Une première instance est créée lors de l’installation. Nous allons installer une seconde instance. Ainsi l’une sera le « publisher » et l’autre sera « subscriber ».

Mise en place de la réplication logique

Prérequis

Il y a très peu de changements à apporter à la configuration par défaut. La plupart des paramètres sont déjà positionnés pour mettre en place la réplication logique. Toutefois il y a un paramètre à modifier sur l’instance qui « publie » : le wal_level. Celui-ci est à « replica« , il doit être placé à « logical« .

Ca se passe dans /etc/postgresql/10/main/postgresql.conf

Pour appliquer le changement il faut redémarrer l’instance :

Publication

Créons une base b1 qui contient une table t1.

Ensuite nous allons jouer l’ordre pour créer la publication :

Et c’est tout! Notez qu’il est possible d’utiliser le mot clé « FOR ALL TABLES » pour que le PostgreSQL ajoute toutes les tables présentes et futures à la publication.

On peut vérifier que la publication a bien été créée avec la méta-commande psql suivante :

Souscription

La réplication logique ne réplique pas les ordres DDL, nous devons donc créer la table sur l’instance « sub ». Il n’est pas nécessaire d’avoir le même nom de base, nous allons donc créer une base b1.

Comme pour la publication, la souscription se crée avec un ordre SQL :

La partie la plus importante est : CONNECTION 'host=/var/run/postgresql port=5432 dbname=b1'

En effet, on indique au « subscriber » comment se connecter à la publication. Dans mon exemple les deux instances sont sur la même machine et écoutent sur une socket locale. Si vous avez des instances sur différentes machines il faudra spécifier l’adresse IP. Ensuite le port et ne surtout pas oublier la base où a été créée la publication.

Comme vous pouvez le voir, le moteur s’est automatiquement chargé de rapatrier les données qui étaient déjà présentes dans la table t1.

Maintenant si j’ajoute des lignes dans la table t1, elles seront automatiquement répliquées sur l’instance « sub » :

Comme pour la publication, il existe une méta-commande pour afficher les souscriptions :

C’est tout pour cet article, dans un prochain article nous verront les restrictions d’usage.

Share

Ecrire un commentaire

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url=""> 

requis