Todos los productos
Search
Centro de documentos

ApsaraDB RDS:Use the logical subscription feature

Última actualización: Sep 03, 2026

La suscripción lógica permite la sincronización unidireccional a nivel de tabla y casi en tiempo real entre instancias de ApsaraDB RDS for PostgreSQL. Utilícela para compartir datos entre regiones, consolidar información de múltiples orígenes en una base de datos central o distribuir los datos en bases de datos independientes.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Una instancia de ApsaraDB RDS for PostgreSQL que ejecute PostgreSQL 10 o posterior con discos en la nube

  • El parámetro wal_level establecido como logical en la instancia publicadora; configúrelo nuevamente en la página de Parameters de la consola de ApsaraDB RDS y reinicie la instancia para que el cambio surta efecto

  • (Para suscripciones entre instancias) El bloque CIDR de la red virtual privada (VPC) agregado a la lista de permitidos de direcciones IP de ambas instancias; por ejemplo, agregue 172.16.0.0/16. Para más detalles, consulte Configure an IP address whitelist

  • Una cuenta con el rol rds_superuser, ya sea la cuenta privilegiada o una cuenta estándar creada mediante CREATE ROLE xxx WITH SUPERUSER

Funcionamiento

  1. En el publicador, cree una publicación para una o varias tablas dentro de una base de datos.

  2. En el suscriptor, cree una suscripción que se conecte a la base de datos del publicador y haga referencia a la publicación.

  3. PostgreSQL transmite los cambios a nivel de fila (INSERT, UPDATE, DELETE) desde las tablas publicadas hacia el suscriptor casi en tiempo real.

Las suscripciones lógicas funcionan entre dos bases de datos dentro de la misma instancia de RDS, o bien entre dos instancias de RDS que residen en la misma VPC y están conectadas mediante endpoints internos.

Para obtener contexto sobre el mecanismo subyacente, consulte Principios y mejores prácticas de la suscripción lógica.

Creación de una publicación en el publicador

  1. Connect to the publisher instance y conéctese a la base de datos que desea publicar.

  2. Cree una publicación para una tabla:

    Solo se pueden publicar tablas base persistentes. Para conocer los objetos compatibles, consulte CREATE PUBLICATION .
    -- On the publisher database
    CREATE PUBLICATION <publication_name> FOR TABLE <schema.table_name>;

    Ejemplo:

    -- On the publisher database (testdb01)
    CREATE PUBLICATION pub1 FOR TABLE public.t1;
  3. Compruebe que la publicación se haya creado correctamente:

    -- On the publisher database
    SELECT * FROM pg_publication;

    La salida muestra pub1 junto con sus detalles de configuración.

Creación de una suscripción en el suscriptor

Los pasos varían según si el publicador y el suscriptor se encuentran en la misma instancia de RDS o en instancias distintas.

Misma instancia de RDS, diferentes bases de datos

Cuando el publicador y el suscriptor residen en la misma instancia, PostgreSQL no puede crear un slot de replicación dentro del mismo comando CREATE SUBSCRIPTION, ya que esto provoca que el comando se bloquee. Se trata de una restricción del motor de PostgreSQL, no de una limitación de RDS. Cree primero el slot por separado y luego haga referencia a él en la suscripción.

  1. Connect to the publisher database y cree un slot de replicación lógica:

    -- On the publisher database
    SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');
  2. Conéctese a la base de datos del suscriptor y cree una tabla con el mismo esquema y nombre que la tabla del publicador.

  3. Conéctese a la base de datos del suscriptor y cree la suscripción haciendo referencia al slot que creó en el paso 1. Si la instancia ejecuta PostgreSQL 16 o posterior:

    Importante

    Incluya siempre create_slot=false en la cláusula WITH cuando el publicador y el suscriptor estén en la misma instancia. Omitir este parámetro provoca que el comando se bloquee.

    -- 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 la instancia ejecuta de PostgreSQL 10 a 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. Verifique la suscripción:

    -- On the subscriber database
    SELECT * FROM pg_subscription;

Diferentes instancias de RDS

  1. Connect to the subscriber instance y conéctese a la base de datos del suscriptor.

  2. Cree una tabla con el mismo esquema y nombre que la tabla del publicador.

  3. Cree la suscripción:

    -- 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>;

    Ejemplo:

    -- 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');

    Para consultar todos los parámetros de suscripción disponibles, vea CREATE SUBSCRIPTION.

  4. Verifique la suscripción:

    -- On the subscriber database
    SELECT * FROM pg_subscription;

Adición de tablas a una publicación existente

Después de agregar tablas a una publicación, actualice la suscripción en el suscriptor, ya que las nuevas tablas no se detectan automáticamente.

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

Supervisión de slots de replicación

Aviso

Los slots de replicación sin uso retienen archivos de Write-Ahead Logging (WAL) e impiden su reciclaje. Si un suscriptor deja de consumir cambios, los archivos WAL se acumulan y pueden llenar el almacenamiento del publicador, lo que dejaría la instancia no disponible.

Después de configurar las suscripciones lógicas:

  • Supervise Storage Used en la instancia publicadora y configure una alerta para detectar crecimientos anómalos.

  • Monitoree Maximum Used Transaction IDs para identificar riesgos de desbordamiento de ID de transacción.

  • Elimine cualquier slot de replicación que ya no esté en uso:

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

    Para listar todos los slots de replicación activos:

    -- On the publisher database
    SELECT * FROM pg_replication_slots;

Pasos siguientes