Replication

Streaming replication no PostgreSQL, passo a passo

PG Monitoring Team May 18, 2026 10 min de leitura

Uma réplica de leitura é a base da alta disponibilidade e da escala de leitura no PostgreSQL — e montá-la é mais acessível do que parece. Este passo a passo leva você de um único primário a um standby por streaming verificado, e explica as partes que a maioria dos tutoriais pula: replication slots e os três tipos de lag.

O que é streaming replication

A replicação física por streaming envia o Write-Ahead Log (WAL) de um primário para um ou mais standbys somente leitura quase em tempo real. O standby reaplica cada mudança byte a byte, dando uma cópia quente para failover e escala de leitura. É em nível de bloco: o standby é um clone físico exato, mesma versão major do PostgreSQL, mesma arquitetura.

1. Configure o primário

No postgresql.conf:

wal_level = replica
max_wal_senders = 10
max_replication_slots = 10
wal_keep_size = 1GB        # rede de segurança se um slot não for usado
hot_standby = on

Crie um papel de replicação dedicado e libere no pg_hba.conf:

CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'secret';
# pg_hba.conf
host  replication  replicator  10.0.0.0/24  scram-sha-256

Recarregue: SELECT pg_reload_conf(); (ou reinicie se mudou o wal_level).

2. Crie um replication slot

Um slot garante que o primário mantenha o WAL até o standby consumi-lo — sem mais erros de "requested WAL segment already removed":

SELECT pg_create_physical_replication_slot('standby1');

3. Clone o diretório de dados com pg_basebackup

No host do standby, faça um base backup que também grava as configurações de conexão:

pg_basebackup \
  -h primary.internal -U replicator \
  -D /var/lib/postgresql/16/main \
  -X stream -S standby1 -R -P

As flags importantes: -R grava o standby.signal e o primary_conninfo automaticamente; -S standby1 liga o backup ao slot; -X stream transmite o WAL durante a cópia para o backup ficar consistente.

4. Suba o standby e verifique

Inicie o PostgreSQL no standby. Ele sobe em modo somente leitura e começa a transmitir. Sempre verifique — não presuma. No primário:

SELECT client_addr, state, sent_lsn, replay_lsn,
       write_lag, flush_lag, replay_lag
FROM pg_stat_replication;

state = streaming e valores de lag minúsculos indicam saúde. No standby, SELECT pg_is_in_recovery(); retorna t.

Síncrono vs assíncrono

Por padrão a replicação é assíncrona — o primário não espera o standby, então um crash pode perder as últimas transações. Para zero perda de dados, defina synchronous_standby_names e o primário esperará a confirmação do standby a cada commit (ao custo de latência de escrita). A maioria roda assíncrono com monitoramento próximo de lag.

Os três lags que importam

Repare que o pg_stat_replication reporta lag de write, flush e replay separadamente. Cada um conta uma história: write aponta para a rede, flush para o I/O de disco do standby, replay para uma consulta longa no standby bloqueando a reaplicação do WAL. Um único número "lag: 12s" esconde qual deles está falhando.

Essa decomposição é exatamente o que o PG Monitoring acompanha continuamente, com um score de risco preditivo que avisa que um standby está caminhando para a falha horas antes de cair — em vez de um snapshot que você tem que consultar na mão.

Related Articles

Ready to experience better PostgreSQL monitoring?

Join thousands of teams who switched from traditional tools to PG Monitoring's AI-powered platform.

Fale conosco