PostgreSQL
20 min de lecturaReplicación
Alta disponibilidad y escalabilidad con replicación
La replicación en PostgreSQL permite mantener copias de la base de datos en múltiples servidores.
Tipos de replicación
#
Streaming Replication
sql
1-- En el primario (postgresql.conf)2wal_level = replica3max_wal_senders = 54 5-- En el secundario6primary_conninfo = 'host=192.168.1.10 port=5432 user=replicator password=secret'#
Logical Replication
sql
1-- Crear publicación en el primario2CREATE PUBLICATION mi_publicacion 3FOR TABLE usuarios, pedidos;4 5-- Crear suscripción en el secundario6CREATE SUBSCRIPTION mi_suscripcion7CONNECTION 'host=192.168.1.10 dbname=mi_bd user=replicator'8PUBLICATION mi_publicacion;Configurar replicación
bash
1# Crear usuario de replicación2CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'secret';3 4# Configurar pg_hba.conf5host replication replicator 192.168.1.0/24 scram-sha-256Monitorear replicación
sql
1-- Estado de la replicación2SELECT * FROM pg_stat_replication;3 4-- Retraso en secundario5SELECT 6 pid,7 application_name,8 state,9 pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) as retraso_bytes10FROM pg_stat_replication;Sintaxis
Sintaxis
sql
1-- Publicación2CREATE PUBLICATION nombre FOR TABLE tabla1, tabla2;3 4-- Suscripción5CREATE SUBSCRIPTION nombre CONNECTION 'cadena_conexión' PUBLICATION nombre;Ejemplos
Configurar replicación
Crear publicación para replicación lógica
Ejemplo
sql
1-- En el servidor primario2CREATE PUBLICATION ventas_pub 3FOR TABLE ventas, productos, clientes4WITH (publish = 'insert, update, delete');5 6-- Verificar publicación7SELECT * FROM pg_publication_tables 8WHERE pubname = 'ventas_pub';Resultado:
| pubname | schemaname | tablename | |-------------|------------|-----------| | ventas_pub | public | ventas | | ventas_pub | public | productos | | ventas_pub | public | clientes |