PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 18/02/2022 17:33:28

Réplication logique en loopback

Bonjour,

J'ai eu un problème en voulant mettre une réplication logique entre 2 bases PROD->ARCHIVAGE lesquelles sont sur le même serveur.

Et comme je n'ai rien vu dans la doc à ce sujet ; je détaille le truc ici, ça peut servir à d'autres.

Si on fait le "CREATE PUBLICATION .... " sur PROD, puis "CREATE SUBSCRIPTION replication_archivage ..."  sur ARCHIVAGE  le CREATE SUBSCRIPTION va planter (enfin il va rester locké).

Apparemment, c'est parce que lors du CREATE SUBSCRIPTION , un slot de réplication logique est créé sur la base où il y a la publication, mais le slot ne peut qu'être créé que lorsqu'il n'y a aucune transaction ouverte sur le serveur ; donc la transaction ouverte sur la base abonnée par le CREATE SUBSCRIPTION bloque la création du slot.

Donc la solution c'est de créer le slot manuellement :

Sur la base de publication (après avoir fait son CREATE PUBLICATION)

select * from pg_create_logical_replication_slot('replication_archivage','pgoutput');

Puis, sur la base abonnée :

CREATE SUBSCRIPTION sub_archivage 
CONNECTION 'host=127.0.0.1 port=5432 dbname=prod connect_timeout=10'
PUBLICATION replication_archivage
WITH (slot_name='replication_archivage',create_slot=false)
;

Hors ligne

Pied de page des forums