Monitorear la replicación lógica (pg_stat_subscription, errores de apply, lag de slots)
PostgreSQLReplicación lógicaComando
-- Subscriber:
SELECT subname, pid, leader_pid, relid::regclass AS syncing_table, received_lsn, latest_end_lsn, now() - last_msg_receipt_time AS since_last_msg, latest_end_time FROM pg_stat_subscription;
SELECT subname, apply_error_count, sync_error_count, stats_reset FROM pg_stat_subscription_stats;
-- Publisher:
SELECT slot_name, plugin, database, active, wal_status,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS confirmed_lag,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_replication_slots WHERE slot_type = 'logical';Qué hace
En el suscriptor, muestra los workers de apply/tablesync, el LSN recibido y confirmado, la hora del último mensaje y el número acumulado de errores de apply/sync; en el publicador, muestra el WAL no confirmado (confirmed_flush) del slot lógico y el WAL total que retiene.
Cuándo usarlo
Durante la configuración de la replicación lógica, para confirmar que el lag se acerca a cero durante el cambio final de un upgrade/migración, y para las alertas de errores.
Precaución
Si pid es NULL, el apply worker no está en ejecución (suscripción deshabilitada o fallando y reiniciándose repetidamente); revise el log del servidor. Un apply_error_count creciente indica un conflicto. Una suscripción detenida acumula WAL y catalog_xmin en el publicador; monitoree el disco del publicador y el bloat del catálogo.
Relacionado
- Añadir una tabla a una publicación y refrescar la suscripción (REFRESH PUBLICATION)
- Resolver un conflicto de replicación lógica (disable_on_error, SKIP)
- Sincronizar los valores de las secuencias en el suscriptor en la replicación lógica
- Eliminar una suscripción y limpiar un slot lógico huérfano en el publicador