Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Use the logical subscription feature

Dernière mise à jour :Aug 19, 2026

L'abonnement logique permet une synchronisation unidirectionnelle, quasi en temps réel et au niveau des tables entre les instances ApsaraDB RDS for PostgreSQL. Utilisez cette fonctionnalité pour partager des données entre différentes régions, agréger des données provenant de plusieurs sources dans une base de données centrale ou répartir des données sur plusieurs bases de données distinctes.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une instance ApsaraDB RDS for PostgreSQL exécutant PostgreSQL 10 ou une version ultérieure avec des disques cloud.

  • Le paramètre wal_level défini sur logical sur l'instance éditrice. Reconfigurez ce paramètre sur la page Parameters de la console ApsaraDB RDS, puis redémarrez l'instance pour que la modification prenne effet.

  • (Pour les abonnements inter-instances) Le bloc CIDR du Virtual Private Cloud (VPC) ajouté à la liste d'autorisation d'adresses IP des deux instances. Par exemple, ajoutez 172.16.0.0/16. Pour plus de détails, consultez la rubrique Configurer une liste d'autorisation d'adresses IP.

  • Un compte disposant du rôle rds_superuser : soit le compte privilégié, soit un compte standard créé avec la commande CREATE ROLE xxx WITH SUPERUSER.

Fonctionnement

  1. Sur l'éditeur, créez une publication pour une ou plusieurs tables d'une base de données.

  2. Sur l'abonné, créez un abonnement qui se connecte à la base de données de l'éditeur et fait référence à la publication.

  3. PostgreSQL diffuse les modifications au niveau des lignes (INSERT, UPDATE, DELETE) des tables publiées vers l'abonné en quasi temps réel.

Les abonnements logiques fonctionnent entre deux bases de données sur la même instance RDS, ou entre deux instances RDS situées dans le même VPC et connectées via des endpoints internes.

Pour obtenir des informations générales sur le mécanisme sous-jacent, consultez la rubrique Principles and best practices of logical subscription.

Créer une publication sur l'éditeur

  1. Connectez-vous à l'instance éditrice et connectez-vous à la base de données que vous souhaitez publier.

  2. Créez une publication pour une table :

    Seules les tables de base persistantes peuvent être publiées. Pour connaître les objets pris en charge, consultez la documentation CREATE PUBLICATION.
    -- On the publisher database
    CREATE PUBLICATION <publication_name> FOR TABLE <schema.table_name>;

    Exemple :

    -- On the publisher database (testdb01)
    CREATE PUBLICATION pub1 FOR TABLE public.t1;
  3. Vérifiez que la publication a bien été créée :

    -- On the publisher database
    SELECT * FROM pg_publication;

    La sortie liste pub1 avec ses détails de configuration.

Créer un abonnement sur l'abonné

Les étapes diffèrent selon que l'éditeur et l'abonné se trouvent sur la même instance RDS ou sur des instances distinctes.

Même instance RDS, bases de données différentes

Lorsque l'éditeur et l'abonné résident sur la même instance, PostgreSQL ne peut pas créer un slot de réplication au sein de la même commande CREATE SUBSCRIPTION ; cela entraînerait un blocage de la commande. Il s'agit d'une restriction du moteur PostgreSQL, et non d'une limitation de RDS. Créez d'abord le slot séparément, puis référencez-le dans l'abonnement.

  1. Connectez-vous à la base de données de l'éditeur et créez un slot de réplication logique :

    -- On the publisher database
    SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');
  2. Connectez-vous à la base de données de l'abonné et créez une table ayant le même schéma et le même nom que la table de l'éditeur.

  3. Connectez-vous à la base de données de l'abonné et créez l'abonnement en référençant le slot créé à l'étape 1. Si l'instance exécute PostgreSQL 16 ou une version ultérieure :

    Important

    Incluez toujours create_slot=false dans la clause WITH lorsque l'éditeur et l'abonné se trouvent sur la même instance. Son omission entraîne le blocage de la commande.

    -- On the subscriber database
    CREATE SUBSCRIPTION <subscription_name>
    CONNECTION 'host=127.0.0.1 port=<port> user=<username> password=<password> dbname=<publisher_db_name>'
    PUBLICATION <publication_name> WITH (create_slot=false, slot_name=<slot_name>);

    Si l'instance exécute PostgreSQL 10 à 15 :

    -- On the subscriber database
    CREATE SUBSCRIPTION <subscription_name>
    CONNECTION 'dbname=<publisher_db_name>'
    PUBLICATION <publication_name> WITH (create_slot=false, slot_name=<slot_name>);
  4. Vérifiez l'abonnement :

    -- On the subscriber database
    SELECT * FROM pg_subscription;

Instances RDS différentes

  1. Connectez-vous à l'instance abonnée et connectez-vous à la base de données de l'abonné.

  2. Créez une table ayant le même schéma et le même nom que la table de l'éditeur.

  3. Créez l'abonnement :

    -- On the subscriber database
    CREATE SUBSCRIPTION <subscription_name>
    CONNECTION 'host=<Internet endpoint of the publisher RDS instance> port=<port> user=<username> password=<password> dbname=<publisher_db_name>'
    PUBLICATION <publication_name>;

    Exemple :

    -- On the subscriber database (testdb02)
    CREATE SUBSCRIPTION sub1_from_pub1
    CONNECTION 'host=pgm-2ze7n9zb0n1f****.pg.rds.aliyuncs.comm port=5432 user=testdbuser password=****x dbname=testdb01'
    PUBLICATION pub1 WITH (enabled, create_slot, slot_name='sub1_from_pub1');

    Pour consulter tous les paramètres d'abonnement disponibles, reportez-vous à la documentation CREATE SUBSCRIPTION.

  4. Vérifiez l'abonnement :

    -- On the subscriber database
    SELECT * FROM pg_subscription;

Ajouter des tables à une publication existante

Après avoir ajouté des tables à une publication, actualisez l'abonnement sur l'abonné ; les nouvelles tables ne sont pas détectées automatiquement.

-- On the subscriber database
ALTER SUBSCRIPTION <subscription_name> REFRESH PUBLICATION;

Surveiller les slots de réplication

Avertissement

Les slots de réplication inutilisés conservent les fichiers Write-Ahead Logging (WAL) et empêchent leur recyclage. Si un abonné cesse de consommer les modifications, les fichiers WAL s'accumulent et peuvent saturer le stockage de l'éditeur, rendant l'instance indisponible.

Après avoir configuré les abonnements logiques :

  • Surveillez l'Storage Used sur l'instance éditrice et configurez une alerte en cas de croissance anormale.

  • Surveillez les Maximum Used Transaction IDs pour détecter tout risque de bouclage des ID de transaction.

  • Supprimez tout slot de réplication qui n'est plus utilisé :

    -- On the publisher database
    SELECT pg_drop_replication_slot('<slot_name>');

    Pour lister tous les slots de réplication actifs :

    -- On the publisher database
    SELECT * FROM pg_replication_slots;

Étapes suivantes