.NET

Replicação Lógica

O PostgreSQL 10 introduz a replicação lógica nativa, que usa um modelo de publicação/subscrição, permitindo-nos criar publicações no nó a montante (ou publicador) e subscrições no nó a jusante (ou subscritor). Para mais detalhes sobre este tema, consulte a documentação do PostgreSQL.

Neste capítulo, vamos usar um cluster de 2 nós para demonstrar a replicação lógica nativa do PostgreSQL 10. Note que, em cada instância do PostgreSQL, precisa de configurar wal_level = logical e também certificar-se de que ajusta o ficheiro pg_hba.conf para conceder acesso de replication entre os 2 nós.

Criar um ambiente de teste

Configure duas instâncias PostgreSQL 10+ da forma que preferir (Docker, uma máquina virtual, ou até mesmo duas bases de dados na mesma máquina) e configure as definições acima em cada uma.

Ligar a ambos os nós

Vamos usar o OmniDB para nos ligarmos a ambos os nós PostgreSQL. Antes de mais, preencha a informação de ligação na grelha de ligações:

Depois selecione ambas as ligações. Repare como o OmniDB percebe que está ligado ao PostgreSQL 10 e ativa um novo nó na vista em árvore da ligação atual: chama-se Logical Replication (Replicação Lógica). Dentro dele, podemos ver Publications (Publicações) e Subscriptions (Subscrições).

Criar uma tabela de teste em ambos os nós

Em ambos os nós, crie uma tabela como esta:

CREATE TABLE customers (
 login text PRIMARY KEY,
 full_name text NOT NULL,
 registration_date timestamptz NOT NULL DEFAULT now()
)

Criar uma publicação na primeira máquina

Dentro do nó de ligação, expanda o nó Logical Replication, depois clique com o botão direito no nó Publications, e escolha a ação Create Publication (Criar Publicação). O OmniDB abrirá um separador de modelo SQL com o comando CREATE PUBLICATION pronto para fazer alguns ajustes e executar:

Depois de ajustar e executar o comando, pode clicar novamente com o botão direito no nó Publications e clicar na ação Refresh (Atualizar). Verá que será criado um novo nó com o mesmo nome que deu à publicação. Ao expandir este nó, verá os detalhes e as tabelas da publicação:

Criar uma subscrição na segunda máquina

Dentro do nó de ligação, expanda o nó Logical Replication, depois clique com o botão direito no nó Subscriptions, e escolha a ação Create Subscription (Criar Subscrição). O OmniDB abrirá um separador de modelo SQL com o comando CREATE SUBSCRIPTION pronto para fazer alguns ajustes e executar:

Depois de ajustar e executar o comando, pode clicar novamente com o botão direito no nó Subscriptions e clicar na ação Refresh. Verá que será criado um novo nó com o mesmo nome que deu à subscrição. Ao expandir este nó, verá os detalhes, as publicações referenciadas e as tabelas da subscrição:

Além disso, o comando CREATE SUBSCRIPTION criou um slot de replicação lógica chamado testsub (o mesmo nome da subscrição) na primeira máquina:

Testar a replicação lógica

Para testar se a replicação está a funcionar, vamos criar alguns dados no nó 1. Clique com o botão direito na tabela public.customers, depois aponte para Data Actions, depois clique na ação Edit Data. Nesta grelha, pode adicionar, editar e remover dados da tabela. Adicione 2 linhas de exemplo, como estas:

Depois, no outro nó, verifique se a tabela public.customers foi automaticamente preenchida. Clique com o botão direito na tabela public.customers, depois aponte para Data Actions, depois clique na ação Query Data:

Como podemos ver, ambas as linhas criadas na primeira máquina foram replicadas para a segunda máquina. Isto diz-nos que a replicação lógica está a funcionar.

Agora pode realizar outras ações, como adicionar/remover tabelas da publicação e criar uma nova publicação que publica todas as tabelas.