IBM Cloud Docs
Databases for PostgreSQL utilisé en tant que cible de réplication logique

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 :

  1. Configure the external (publisher) PostgreSQL wal_level=logical.
  2. Chaque table sélectionnée pour la réplication doit contenir une clé primaire ou avoir REPLICA IDENTITY définie.
  3. 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.
  4. L' PostgreSQL t à partir duquel vous effectuez la réplication doit avoir TLS/SSL activé.
  5. 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.

  1. 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.
  2. 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.

  1. 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.

  2. Modifiez votre fichier d' postgresql.conf s locales avec la configuration de réplication logique requise. Affectez à wal_level la valeur 'logical' et définissez listen_addresses='*' de manière à accepter les connexions de n'importe quel hôte.

    listen_addresses='*'
    wal_level = logical
    
  3. 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.

  1. Connectez-vous à la base de données source de la publication à l'aide de votre utilisateur de réplication.

    psql -U replicator -d exampledb
    
  2. Créez le canal de publication.

    exampledb=> CREATE PUBLICATION my_publication;
    
  3. 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.

  1. Connectez-vous à la base de données créée pour la réplication avec l'utilisateur admin.

    psql -U admin -d exampledb
    
  2. 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;