Nivel 3 · 25 min
Replicación
PostgreSQL soporta replicación streaming (física, byte a byte del WAL) y replicación lógica (decodificación del WAL a cambios lógicos de fila). La replicación streaming es la base de HA; la lógica habilita casos como réplicas de lectura selectivas y migraciones sin downtime.
Replicación Streaming
El primario escribe cambios al WAL (Write-Ahead Log). Las réplicas se conectan y reciben el WAL stream en tiempo real. La replicación puede ser asíncrona (default, posible pérdida de datos en failover) o síncrona (SYNCHRONOUS_COMMIT = on, el primario espera confirmación de al menos una réplica antes de confirmar el commit al cliente).
Replication Slots
Los slots de replicación retienen segmentos WAL hasta que el consumidor los confirme. Garantizan que la réplica no pierda datos aunque se desconecte temporalmente. PELIGRO: un slot inactivo acumula WAL indefinidamente y puede llenar el disco. Monitoreá pg_replication_slots y tené alertas en pg_wal_lsn_diff para detectar réplicas que se están quedando atrás.
Replicación Lógica y Failover
La replicación lógica decodifica el WAL a operaciones INSERT/UPDATE/DELETE y las aplica en el destino. Permite réplicas selectivas (solo algunas tablas), cross-version, cross-OS y bidireccional. Para failover: pg_promote() en la réplica elegida, actualizar connection strings. pg_rewind re-sincroniza el primario viejo sin full base backup.
Code example
-- Ver estado de replicación
SELECT
client_addr, state, sent_lsn, write_lsn,
flush_lsn, replay_lsn,
(sent_lsn - replay_lsn) AS replication_lag_bytes
FROM pg_stat_replication;
-- Ver replication slots y WAL retenido
SELECT slot_name, active, restart_lsn,
pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) AS lag_bytes
FROM pg_replication_slots;
-- Promover réplica a primario
SELECT pg_promote();