Databases for PostgreSQL como destino de réplica lógica
IBM Cloud® Databases for PostgreSQL admite la replicación lógica, donde puede crear un suscriptor o un publicador. También puede configurar su PostgreSQL externo como editor y su implantación de Databases for PostgreSQL como suscriptor, y replicar sus datos desde una base de datos externa a su implantación.
La réplica lógica solo está disponible en despliegues que ejecutan PostgreSQL 10 o superior. Los enlaces a la documentación de PostgreSQL le dirigen a la versión actual de PostgreSQL. Si necesita documentación para una versión específica, puede encontrar enlaces a las distintas versiones de PostgreSQL en la página de documentación PostgreSQL.
Configuración del publicador
La instancia de PostgreSQL externa es el publicador, y se debe configurar para que el despliegue de Databases for PostgreSQL pueda establecer la conexión y sea capaz de extraer los datos correctamente.
Funciones de editor
create_publisher
En cada base de datos puede crear varias publicaciones para publicar los cambios en un suscriptor diferente.
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;
CREATE PUBLICATION
list_publisher
Indique el número de publicaciones que se ejecutan en cada base de datos.
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
Modificar la definición de la publicación.
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
Soltar/Eliminar la publicación que no se está utilizando.
Usage:
exampledb=# drop publication my_publication_new;
DROP PUBLICATION
Considere lo siguiente como requisitos previos:
- Configure el PostgreSQL externo (editor)
wal_level=logical
. - Cada tabla seleccionada para la replicación debe contener una clave primaria, o tener
REPLICA IDENTITY
establecida. - Su PostgreSQL externo (editor) debe tener un usuario de replicación que tenga el privilegio PostgreSQL
REPLICATION
, y ese usuario debe tener privilegios SELECT y USAGE en las bases de datos junto con privilegios REPLICATION. - La dirección PostgreSQL desde la que está replicando debe tener TLS/SSL activado.
- Proporcionar privilegios BYPASSRLS al usuario externo (editor) de replicación de PostgreSQL, si la seguridad a nivel de fila está habilitada.
Existen limitaciones inherentes y algunas restricciones a la replicación lógica descritas en la documentación de PostgreSQL. Revíselos antes de decidir si la réplica lógica es adecuada para su caso de uso.
Configuración del suscriptor
Para configurar su Databases for PostgreSQL despliegue y asegurarse de que sus datos se replican a través correctamente, asegúrese de lo siguiente.
- Debe crear una base de datos en el despliegue con el mismo nombre que la base de datos que desea replicar.
- La réplica lógica funciona a nivel de tabla, por lo que debe crear cada tabla que desee replicar en el suscriptor antes de iniciar el proceso de la réplica lógica. (Puede utilizar
pg_dump
como ayuda) No es necesario que la tabla del suscriptor sea idéntica a su equivalente del publicador. No obstante, la tabla del suscriptor debe contener al menos todas las columnas presentes en la tabla del publicador. Las columnas adicionales del suscriptor no deben tener valores no nulos ni otras restricciones. Si fuera así, la réplica fallaría.
Los comandos de suscripción nativos de PostgreSQL requieren privilegios de superusuario, que no están disponibles en las implantaciones de Databases for PostgreSQL. En su lugar, el despliegue incluye un conjunto de funciones que se pueden utilizar para establecer y gestionar la réplica lógica para la suscripción.
Únicamente el usuario administrador proporcionado por Databases for PostgreSQL tiene permisos para ejecutar los mandatos de réplica siguientes que le permiten suscribirse y replicar contenido de un publicador de PostgreSQL externo.
Funciones de suscriptor
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
Esta función se utiliza para establecer el nombre de ranura de una suscripción en NINGUNO. Esto es necesario para eliminar una suscripción, de modo que no se pueda eliminar una ranura de replicación remota, que no exista o que nunca haya existido.
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
Esta función se utiliza para renovar una suscripción en el suscriptor después de que se hayan realizado cambios en el publicador, como la adición o eliminación de una tabla.
Arguments:
subscription_name Name the subscription channel to refresh
db_name The name of the replicated database
Usage:
exampledb=> SELECT refresh_subscription('subs1','exampledb');
Configuración de la réplica lógica en el publicador
Para configurar su PostgreSQL externo como editor, realice los siguientes pasos.
-
Edite su página local
pg_hba.conf
y añada lo siguiente.hostssl replication replicator 0.0.0.0/0 md5 hostssl all replicator 0.0.0.0/0 md5
El campo "replicador" es el usuario que ha configurado con el privilegio PostgreSQL
REPLICATION
. -
Edite su
postgresql.conf
local con la configuración de replicación lógica requerida. Establezcawal_level
en 'logical' y establezcalisten_addresses='*'
para aceptar conexiones de cualquier host.listen_addresses='*' wal_level = logical
-
Reinicie el servidor PostgreSQL.
Ahora puede definir un editor en la base de datos y añadir las tablas que desea replicar al suscriptor.
-
Inicie sesión en la base de datos desde la que desee realizar la publicación con el usuario de réplica.
psql -U replicator -d exampledb
-
Cree el canal de publicación.
exampledb=> CREATE PUBLICATION my_publication;
-
Añada tablas al publicador.
exampledb=> ALTER PUBLICATION my_publication ADD TABLE my_table;
El número de trabajadores que respaldan la sincronización que define el parámetro de configuración
max_logical_replication_workers
es limitado y no se puede modificar. Por lo tanto, utilice el menor número posible de publicaciones y añada tantas tablas como sea posible a una sola publicación.
Configuración de la réplica lógica en el suscriptor
Para configurar su implantación Databases for PostgreSQL como suscriptor, realice los pasos siguientes.
-
Inicie sesión en la base de datos creada para la réplica con el usuario
admin
.psql -U admin -d exampledb
-
Ejecute la consulta siguiente para llamar a la función
create_subscription
y crear el canal de suscriptor.exampledb=> SELECT create_subscription('subs1','130.215.223.184','5432','admin','password','exampledb','my_publication');
Supervisión de la réplica
Puede supervisar el estado de la réplica lógica tanto desde el publicador como desde el suscriptor ejecutando la consulta siguiente en cualquiera de ellos.
exampledb=> SELECT * FROM pg_stat_replication;