Oi, eu sou capaz de iniciar a replicação de streaming com o postgresql, copiando os arquivos do banco de dados com este comando:
select pg_start_backup('clone', true);
Isso mesmo, mas o problema é que eu preciso copiar todos os arquivos de banco de dados em /var/lib/postgresql/data de um servidor para outro. Esses arquivos são muito grandes por causa dos índices, por exemplo.
Quero saber se é possível fazer o mesmo usando um dump simples e restaurando ele no slave, o que é menor e mais rápido para transferir na rede, vai funcionar? E o que devo fazer para trabalhar?
Você não pode iniciar a replicação de streaming sem uma cópia física do diretório de dados; geralmente criado com o
pg_basebackup
comando.A razão para isso tem a ver com o que a replicação de streaming e a replicação de envio WAL fazem. Em ambos os casos você está aplicando o Write Ahead Log ao diretório de dados usando o mecanismo de recuperação do postgresql. Portanto, para não quebrar a consistência do banco de dados, você deve aplicar o mesmo conjunto de alterações ao mesmo ponto de partida e está restrito a replicar todo o cluster de banco de dados. É também por isso que você não pode interromper o streaming ou descartar segmentos WAL, pois uma vez que você interrompe a continuidade, o servidor de banco de dados não pode garantir que esteja em um estado consistente.
No postgreSQL 10 ou posterior, você pode usar a replicação lógica para replicar apenas um banco de dados em um cluster ou até mesmo uma única tabela. E, nesse caso, você pode começar com uma "cópia lógica" do banco de dados, como os produzidos pelo
pg_dump
.