¿Qué significa "invalid contrecord length"?

Problema

En el archivo de registro del nodo standby aparecen las siguientes líneas:

2018-02-01 22:08:34 UTC [21083]: [4-1] db=,user= LOG: consistent recovery state reached at 5ED82/6F1691F0
2018-02-01 22:08:34 UTC [21083]: [5-1] db=,user= LOG: invalid contrecord length 4711 at 5ED82/6F1691F0

Diagnóstico

Aunque el mensaje es extraño realmente solo indica el comportamiento normal de un standby al reanudar la replicación en un nodo upstream que se ha detenido de forma inesperada y no requiere de acciones correctivas.

Ambas líneas muestran mensajes de nivel de información de "LOG". La primera indica que el nodo standby ha reanudado la replicación con éxito. Mientras la segunda está reportando el mensaje "invalid contrecord length", que se trata simplemente de una indicación de que el standby ha alcanzado el último archivo WAL local completo, y va a reanudar la replicación desde el nodo upstream.

Pasos de diagnóstico

Es posible comprobar pg_stat_replication con send_lag y apply_lag (los resultados se muestran en bytes) para confirmar que el standby se ha unido al primario y se está replicando con normalidad.

En PostgreSQL 10 y versiones posteriores:

SELECT
  pg_wal_lsn_diff(pg_current_wal_insert_lsn(), sent_lsn) as send_lag,
  pg_wal_lsn_diff(pg_current_wal_insert_lsn(), replay_lsn) as apply_lag
FROM
  pg_stat_replication;

En PostgreSQL 9.6 y versiones anteriores:

SELECT
  pg_xlog_location_diff(pg_current_xlog_insert_location(), sent_location) as send_lag,
  pg_xlog_location_diff(pg_current_xlog_insert_location(), replay_location) as apply_lag
FROM
  pg_stat_replication;