A partir de la versión 10.4, RDS para PostgreSQL admite la sintaxis SQL de publicación y suscripción introducida en PostgreSQL 10. Para obtener más información, consulte Replicación lógica
nota
Además de la función de replicación lógica nativa de PostgreSQL introducida en PostgreSQL 10, RDS para PostgreSQL también admite la extensión pglogical
. Para obtener más información, consulte Uso de pglogical para sincronizar datos entre instancias.
A continuación encontrará información sobre la configuración de la replicación lógica para una instancia de base de datos de RDS for PostgreSQL.
Temas
Comprensión de la replicación lógica y la descodificación lógica
RDS for PostgreSQL admite el streaming de los cambios del registro de escritura anticipada (WAL) mediante las ranuras de replicación lógica de PostgreSQL. También admite el uso de decodificación lógica. Puede configurar ranuras de replicación lógica en su instancia y transmitir los cambios de la base de datos a través de estas ranuras a un cliente como pg_recvlogical
. Las ranuras de replicación lógica se crean a nivel de la base de datos y admiten conexiones de replicación a una única base de datos.
Los clientes más comunes para la replicación lógica de PostgreSQL son AWS Database Migration Service o un host administrado personalizado en una instancia de Amazon EC2. La ranura de replicación lógica no tiene información sobre el receptor de la transmisión. Además, no existe el requisito de que el destino sea una base de datos de réplica. Si configura una ranura de replicación lógica y no lee desde la ranura, los datos podrían escribirse y rellenarse rápidamente en el almacenamiento de la instancia de base de datos.
La replicación y descodificación lógicas de PostgreSQL en Amazon RDS se activan con un parámetro, un tipo de conexión de replicación y un rol de seguridad. El cliente para la descodificación lógica puede ser cualquier cliente que sea capaz de establecer una conexión de replicación con una base de datos en una instancia de base de datos PostgreSQL.
Para activar la descodificación lógica para una instancia de base de datos de RDS for PostgreSQL
-
Asegúrese de que la cuenta de usuario que está utilizando tenga los siguientes roles:
-
El rol
rds_superuser
para poder activar la replicación lógica -
El rol
rds_replication
para conceder permisos para administrar ranuras lógicas y para transmitir datos mediante ranuras lógicas
-
-
Establezca el parámetro estático
rds.logical_replication
en 1. Como parte de la aplicación de este parámetro, también defina los parámetroswal_level
,max_wal_senders
,max_replication_slots
ymax_connections
. Estos cambios de parámetro pueden incrementar la generación de WAL, por lo que el parámetrords.logical_replication
se debe configurar solo cuando se utilicen ranuras lógicas. -
Reinicie la instancia de base de datos para que el parámetro
rds.logical_replication
estático tenga efecto. -
Cree una ranura de replicación lógica como se indica en la siguiente sección. Este proceso necesita que especifique un complemento de descodificación. Actualmente, RDS for PostgreSQL admite los complementos de salida test_decoding y wal2json que se incluyen con PostgreSQL.
Para obtener más información acerca de la descodificación lógica de PostgreSQL, consulte la documentación de PostgreSQL
Trabajo con ranuras de replicación lógica
Puede usar comandos de SQL para trabajar con las ranuras lógicas. Por ejemplo, el siguiente comando crea una ranura lógica denominada test_slot
usando el complemento de salida predeterminado de PostgreSQL test_decoding
.
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'test_decoding');
slot_name | xlog_position
-----------------+---------------
regression_slot | 0/16B1970
(1 row)
Para ver las ranuras lógicas, use el siguiente comando.
SELECT * FROM pg_replication_slots;
Para eliminar una ranura lógica, use el siguiente comando.
SELECT pg_drop_replication_slot('test_slot');
pg_drop_replication_slot
-----------------------
(1 row)
Para ver más ejemplos del trabajo con ranuras de replicación lógica, consulte Logical Decoding Examples
Luego de crear la ranura de replicación lógica, se puede iniciar el streaming. El siguiente ejemplo muestra cómo se controla la decodificación lógica a través del protocolo de replicación del streaming. Este ejemplo utiliza el programa pg_recvlogical, que se incluye en la distribución de PostgreSQL. Esto requiere que la autenticación del cliente se configure para permitir las conexiones de replicación.
pg_recvlogical -d postgres --slot test_slot -U postgres --host -
instance-name.111122223333
.aws-region
.rds.amazonaws.com -f - --start
Para ver el contenido de la vista pg_replication_origin_status
, consulte la función pg_show_replication_origin_status
.
SELECT * FROM pg_show_replication_origin_status();
local_id | external_id | remote_lsn | local_lsn
----------+-------------+------------+-----------
(0 rows)