Global outage event
If you're experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
¿Cómo uso la replicación lógica para actualizar mi clúster de base de datos de Aurora compatible con PostgreSQL?
Quiero usar la replicación lógica para actualizar mi clúster de base de datos (DB) de la edición de Amazon Aurora compatible con PostgreSQL.
Descripción corta
Para usar la replicación lógica para actualizar las versiones de los clústeres de bases de datos de Aurora compatible con PostgreSQL, configura la replicación entre el clúster de origen original y el nuevo clúster de destino. Luego, migra gradualmente los cambios en los datos y cambia las aplicaciones al nuevo clúster.
Resolución
Preparar el clúster de origen
Sigue estos pasos:
-
Establece el parámetro rds.logical_replication en 1 en tu grupo de parámetros de clúster de base de datos personalizado.
-
Ejecuta la siguiente consulta para comprobar que wal_level es lógico y qye rds.logical_replication está activado:
SELECT name,setting FROM pg_settings WHERE name IN ('wal_level','rds.logical_replication');Resultado de ejemplo:
name | setting ------------------------+--------- rds.logical_replication | on wal_level | logical (2 rows) -
Ejecuta el siguiente comando para crear una publicación en la base de datos:
CREATE PUBLICATION my_publication FOR ALL TABLES;Nota: Sustituye my_publication por el nombre de tu publicación.
-
Ejecuta la siguiente consulta para recuperar información de la publicación:
SELECT * FROM pg_publication;Resultado de ejemplo:
oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot -------+----------------+----------+--------------+-----------+-----------+-----------+-------------+------------ 20493 | my_publication | 16400 | t | t | t | t | t | f (1 row) -
Ejecuta el siguiente comando para crear una ranura de replicación en la base de datos:
SELECT pg_create_logical_replication_slot('my_replication_slot', 'pgoutput');Ejemplo de salida para pg_create_logical_replication_slot:
pg_create_logical_replication_slot ------------------------------------ (my_replication_slot,0/6EC7260) (1 row)Nota: Sustituye my_replication_slot por el nombre de tu ranura de replicación.
-
Ejecuta el siguiente comando para obtener la lista de las ranuras de replicación que se encuentran actualmente en el clúster de base de datos y su estado:
SELECT * FROM pg_replication_slots;Ejemplo de salida para pg_replication_slots:
slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size | two_phase ---------------------+----------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------+----------- my_replication_slot | pgoutput | logical | 16401 | test | f | f | | | 308479 | 0/6EC7208 | 0/6EC7260 | reserved | | f (1 row)
Clonación del clúster de origen
Utiliza la consola de Amazon Relational Database Service (Amazon RDS) o la interfaz de la línea de comandos de AWS (AWS CLI) para crear un clon del clúster de base de datos de origen de Aurora compatible con PostgreSQL.
Preparación del clon para una actualización
Para obtener más información, consulta Preparación del clon para una actualización en Actualización de Aurora PostgreSQL a una nueva versión principal.
Actualización del clúster a una nueva versión
Para obtener más información, consulta Actualización del clúster a una nueva versión principal en Actualización de Aurora PostgreSQL a una nueva versión principal.
Preparación del clon para la replicación
Sigue estos pasos:
-
Cuando el clon esté disponible tras la actualización, utiliza psql para conectarte al clúster y, a continuación, ejecuta el siguiente comando para crear la suscripción:
CREATE SUBSCRIPTION my_subscription CONNECTION 'postgres://admin_user_name:admin_user_password@source_instance_URL/database' PUBLICATION my_publication WITH (copy_data = false, create_slot = false, enabled = false, connect = true, slot_name = 'my_replication_slot');Nota: Sustituye admin_user_name por el nombre de usuario del clúster de origen y admin_user_password por la contraseña del clúster de origen. Además, sustituye source_instance_URL por el punto de enlace del clúster de origen y database por el nombre de tu base de datos.
-
Ejecuta la siguiente consulta para recuperar el origen de replicación que creaste:
SELECT * FROM pg_replication_origin;Ejemplo de salida para pg_replication_origin:
roident | roname ---------+---------- 1 | pg_32783 (1 row) -
Ejecuta la siguiente consulta para recuperar información sobre la suscripción a la replicación lógica:
SELECT * FROM pg_subscription;Ejemplo de salida para pg_subscription:
oid | subdbid | subskiplsn | subname | subowner | subenabled | subbinary | substream | subtwophasestate | subdisableonerr | subpasswordrequired | subrunasowner | subconninfo | subslotname | subsynccommit | subpublications | suborigin -------+---------+------------+-----------------+----------+------------+-----------+-----------+------------------+-----------------+---------------------+---------------+------------------------------------------------------------------------------------------------+---------------------+---------------+------------------+----------- 32783 | 16401 | 0/0 | my_subscription | 16400 | f | f | f | d | f | t | f | postgres://admin_user_name:admin_user_password@source_instance_URL/database | my_replication_slot | off | {my_publication} | any (1 row) -
Ejecuta el siguiente comando para especificar el punto de inicio en la secuencia de registro para la replicación:
SELECT pg_replication_origin_advance('roname', 'log_sequence_number');Nota: Sustituye roname por el identificador que devolvió la vista pg_replication_origin. Sustituye log_sequence_number por tu número de secuencia de registro.
Resultado de ejemplo:pg_replication_origin_advance ------------------------------ (1 row) -
Ejecuta el siguiente comando para activar la replicación lógica:
ALTER SUBSCRIPTION my_subscription ENABLE;Nota: Sustituye my_subscription por el nombre de tu suscripción.
Resultado de ejemplo:ALTER SUBSCRIPTION -
Ejecuta el siguiente comando para confirmar que la replicación funciona:
SELECT now() AS CURRENT_TIME, slot_name, active, active_pid, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS diff_size, pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS diff_bytes FROM pg_replication_slots WHERE slot_type = 'logical';Resultado de ejemplo:
current_time | slot_name | active | active_pid | diff_size | diff_bytes ----------------------+---------------------+--------+------------+-----------+------------ 2024-01-20 10:30:45 | my_replication_slot | t | 12345 | 16 MB | 16777216 (1 row) -
(Opcional) Ejecuta el siguiente comando para supervisar el retraso de la replicación:
SELECT now() AS CURRENT_TIME, slot_name, active, active_pid, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS diff_size, pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn) AS diff_bytes FROM pg_replication_slots WHERE slot_type = 'logical';Resultado de ejemplo:
-[ RECORD 1 ]+------------------------------ current_time | 2025-10-05 22:07:16.077928+00 slot_name | my_replication_slot active | t active_pid | 5392 diff_size | 0 bytes diff_bytes | 0Nota: Cuando los valores anteriores llegan a 0, la réplica coincide con la instancia de base de datos de origen.
Realización de tareas posteriores a la actualización
Para obtener más información, consulta Realización de tareas posteriores a la actualización.
Información relacionada
- Temas
- Database
- Etiquetas
- Aurora PostgreSQL
- Idioma
- Español

Contenido relevante
- preguntada hace un año
- preguntada hace 10 meses
- preguntada hace 6 meses