A atualização (quase) sem tempo de inatividade deve ser possível com pglogical . Pelo menos para o PostgreSQL > = 9.4 e mais recente, deve funcionar.
É um projeto relativamente novo (2016) baseado no código da Replicação bidirecional para o PostgreSQL . Para a instalação, você precisará do repositório do 2ndQuadrant .
O uso é descrito no README , uma reinicialização do banco de dados é necessária (você precisa atualizar a configuração de replicação), mas pelo menos não deve t causar várias horas de inatividade.
Ao contrário de repmgr , pglogical
é destinado à replicação de banco de dados única, que levará muito mais tempo do que a cópia arquivos binários WAL.
Primeiramente, habilite a extensão para cada banco de dados que precisa ser copiado (atualizado):
CREATE EXTENSION pglogical;
Atualmente, todos os comandos precisam ser executados como superusuário ( postgres
). Comece com a criação de um "nó mestre" ( provider
):
SELECT pglogical.create_node(
node_name := 'provider1',
dsn := 'host=providerhost port=5432 dbname=db'
);
e marca esquema (s) para replicação:
SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
e replicação de sequências:
SELECT pglogical.replication_set_add_all_sequences('default', ARRAY['public']);
Observe que cada tabela requer uma chave primária; caso contrário, a replicação não será iniciada. Ao contrário de outros métodos de backup, aqui a consistência da tabela é importante.
Continue com "nó de espera" ( subscriber
)
SELECT pglogical.create_node(
node_name := 'subscriber1',
dsn := 'host=thishost port=5432 dbname=db'
);
e finalmente iniciar a replicação:
SELECT pglogical.create_subscription(
subscription_name := 'subscription1',
provider_dsn := 'host=providerhost port=5432 dbname=db'
);