Saltar al contenido principal
PostgreSQL
20 min de lectura

Replicació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-256

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