Databases for PostgreSQL utilisé en tant que cible de réplication logique
IBM Cloud® Databases for PostgreSQL prend en charge la réplication logique, qui permet de créer un abonné ou un éditeur. Vous pouvez également configurer votre PostgreSQL externe en tant qu'éditeur et votre déploiement Databases for PostgreSQL en tant qu'abonné, et répliquer vos données depuis une base de données externe vers votre déploiement.
La réplication logique est disponible uniquement sur les déploiements qui exécutent PostgreSQL version 10 ou ultérieure. Les liens vers la documentation d' PostgreSQL vous dirigent vers la version actuelle d' PostgreSQL. Si vous avez besoin de la documentation d'une version spécifique, vous trouverez des liens vers les différentes versions d' PostgreSQL s sur la page de documentation d' PostgreSQL.
Configuration du diffuseur
L'instance PostgreSQL externe est le diffuseur. Elle doit être configurée de manière à permettre à votre déploiement Databases for PostgreSQL de se connecter et de pouvoir exraire les données correctement.
Fonctions d'éditeur
create_publisher
Dans chaque base de données, vous pouvez créer plusieurs publications pour publier les modifications dans un abonné différent.
Arguments:
publisher_name The Unique name of publisher.
for table To publish single/list of tables
for all table To publish all tables, along with future tables.
for all tables in schema To publish all tables in schema, along wth future tables.
Usage:
exampledb=> create publication my_publication for all tables ;
CREATE PUBLICATION
list_publisher
Indiquez le nombre de publications en cours dans chaque base de données.
Usage:
exampledb=# select * from pg_publication;
oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate
-------+----------------+----------+--------------+-----------+-----------+-----------+-------------
16401 | my_publication | 10 | t | t | t | t | t
alter_publisher
Modifier la définition de la publication.
Syntax:
ALTER PUBLICATION name ADD publication_object [, ...]
ALTER PUBLICATION name SET publication_object [, ...]
ALTER PUBLICATION name DROP publication_object [, ...]
ALTER PUBLICATION name SET ( publication_parameter [= value] [, ... ] )
ALTER PUBLICATION name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER PUBLICATION name RENAME TO new_name
Usage:
exampledb=# ALTER PUBLICATION my_publication RENAME TO my_publication_new;
ALTER PUBLICATION
drop_publisher
Supprimer/retirer la publication qui n'est pas utilisée.
Usage:
exampledb=# drop publication my_publication_new;
DROP PUBLICATION
Considérer les éléments suivants comme des prérequis :
- Configure the external (publisher) PostgreSQL
wal_level=logical
. - Chaque table sélectionnée pour la réplication doit contenir une clé primaire ou avoir
REPLICA IDENTITY
définie. - Votre PostgreSQL externe (éditeur) doit disposer d'un utilisateur de réplication qui possède le privilège PostgreSQL
REPLICATION
, et cet utilisateur doit disposer des privilèges SELECT et USAGE sur les bases de données ainsi que des privilèges REPLICATION. - L' PostgreSQL t à partir duquel vous effectuez la réplication doit avoir TLS/SSL activé.
- Accorder les privilèges BYPASSRLS à l'utilisateur externe (éditeur) de réplication d' PostgreSQL, si la sécurité au niveau des lignes est activée.
Il existe des limites inhérentes et certaines restrictions à la réplication logique décrites dans la documentation d' PostgreSQL. Examinez-les avant de décider si la réplication logique est adaptée à votre cas d'utilisation.
Configuration du diffuseur
Pour configurer votre déploiement Databases for PostgreSQL et vous assurer que vos données sont répliquées correctement, assurez-vous de ce qui suit.
- Vous devez créer une base de données dans votre déploiement portant le même nom que la base de données que vous souhaitez répliquer.
- La réplication logique fonctionne au niveau table, par conséquent, vous devez créer dans l'abonné chaque table que vous choisissez de publier avant de démarrer le processus de réplication logique. (Vous pouvez utiliser
pg_dump
pour vous aider.) Il n'est pas nécessaire que la table de l'abonné soit identique à la table équivalente sur le diffuseur. Toutefois, la table de l'abonné doit contenir au moins chaque colonne présente dans la table du diffuseur. Les colonnes supplémentaires présentes dans l'abonné ne doivent pas avoir d'attribut NOT NULL ou d'autres contraintes. Si tel est le cas, la réplication échoue.
Les commandes d'abonnement à l' PostgreSQL e native nécessitent des privilèges de superutilisateur, qui ne sont pas disponibles sur les déploiements d' Databases for PostgreSQL. Au lieu de cela, votre déploiement inclut un ensemble de fonctions qui peuvent être utilisées pour définir et gérer la réplication logique pour l'abonnement.
Seul l'administrateur fourni par Databases for PostgreSQL possède les droits nécessaires pour exécuter les commandes de réplication ci-après permettant de s'abonner à du contenu et de répliquer celui-ci à partir d'un diffuseur PostgreSQL externe.
Fonctions d'abonné
create_subscription
Arguments:
subscription_name Unique name to create the subscription channel with
host_ip Publisher hostname or public IP address
port Port number publisher is running on
username `admin` user created on the publisher
password Password of the `admin` user on the publisher
db_name The name of the database to be replicated
publisher_name The name of publisher channel on the publisher
Usage:
exampledb=> SELECT create_subscription('subs1','130.215.223.184','5432','password','admin','exampledb','my_publication');
delete_subscription
Arguments:
subscription_name Name the subscription channel to delete
db_name The name of the replicated database
Usage:
exampledb=> SELECT delete_subscription('subs1', 'exampledb');
list_subscriptions
Arguments:
None
Usage:
exampledb=> SELECT * FROM list_subscriptions();
disable_subscription
Arguments:
subscription_name Name the subscription channel to disable
db_name The name of the replicated database
Usage:
exampledb=> SELECT disable_subscription('subs1','exampledb');
enable_subscription
Arguments:
subscription_name Name the subscription channel to enable
db_name The name of the replicated database
Usage:
exampledb=> SELECT enable_subscription('subs1','exampledb');
subscription_slot_none
Cette fonction est utilisée pour attribuer la valeur NONE au nom de l'emplacement d'un abonnement. Ceci est nécessaire pour supprimer un abonnement afin qu'un slot de réplication à distance ne puisse pas être supprimé ou n'existe pas ou n'a jamais existé.
Arguments:
subscription_name Name the subscription channel to alter
db_name The name of the replicated database
Usage:
exampledb=> SELECT subscription_slot_none('subs1','exampledb');
refresh_subscription
Cette fonction est utilisée pour actualiser un abonnement sur l'abonné après que des modifications ont été effectuées sur le diffuseur, comme l'ajout ou le retrait d'une table.
Arguments:
subscription_name Name the subscription channel to refresh
db_name The name of the replicated database
Usage:
exampledb=> SELECT refresh_subscription('subs1','exampledb');
Configuration de la réplication logique sur le diffuseur
Pour configurer votre PostgreSQL externe en tant qu'éditeur, procédez comme suit.
-
Modifiez votre fichier d'
pg_hba.conf
s locales et ajoutez ce qui suit.hostssl replication replicator 0.0.0.0/0 md5 hostssl all replicator 0.0.0.0/0 md5
Le champ « réplicateur » est l'utilisateur que vous avez configuré avec le privilège « PostgreSQL »
REPLICATION
. -
Modifiez votre fichier d'
postgresql.conf
s locales avec la configuration de réplication logique requise. Affectez àwal_level
la valeur 'logical' et définissezlisten_addresses='*'
de manière à accepter les connexions de n'importe quel hôte.listen_addresses='*' wal_level = logical
-
Redémarrez votre serveur PostgreSQL.
Vous pouvez maintenant définir un diffuseur sur la base de données et ajouter à l'abonné les tables que vous souhaitez répliquer.
-
Connectez-vous à la base de données source de la publication à l'aide de votre utilisateur de réplication.
psql -U replicator -d exampledb
-
Créez le canal de publication.
exampledb=> CREATE PUBLICATION my_publication;
-
Ajoutez des tables au diffuseur.
exampledb=> ALTER PUBLICATION my_publication ADD TABLE my_table;
Le nombre de travailleurs qui soutiennent la synchronisation définie par le paramètre de configuration
max_logical_replication_workers
est limité et ne peut être modifié. Par conséquent, il convient d'utiliser le plus petit nombre possible de publications et d'ajouter autant de tableaux que possible à une seule publication.
Configuration de la réplication logique sur l'abonné
Pour configurer votre déploiement Databases for PostgreSQL en tant qu'abonné, procédez comme suit.
-
Connectez-vous à la base de données créée pour la réplication avec l'utilisateur
admin
.psql -U admin -d exampledb
-
Exécutez la requête suivante pour appeler la fonction
create_subscription
et créer le canal d'abonné :exampledb=> SELECT create_subscription('subs1','130.215.223.184','5432','admin','password','exampledb','my_publication');
Surveillance de la réplication
Vous pouvez surveiller l'état de la réplication logique à partir du diffuseur et de l'abonné en exécutant la requête suivante sur l'un ou l'autre.
exampledb=> SELECT * FROM pg_stat_replication;