.NET

Replica logica

PostgreSQL 10 introduce la replica logica nativa, che utilizza un modello publish/subscribe: possiamo quindi creare pubblicazioni sul nodo a monte (o publisher) e sottoscrizioni sul nodo a valle (o subscriber). Per maggiori dettagli, consulta la documentazione di PostgreSQL.

In questo capitolo utilizzeremo un cluster a 2 nodi per dimostrare la replica logica nativa di PostgreSQL 10. Nota che su ciascuna istanza PostgreSQL è necessario configurare wal_level = logical e assicurarsi di modificare il file pg_hba.conf per concedere l’accesso in replication tra i 2 nodi.

Creazione di un ambiente di test

Configura due istanze PostgreSQL 10+ nel modo che preferisci (Docker, una macchina virtuale o anche due database sulla stessa macchina) e imposta su ciascuna le configurazioni indicate sopra.

Connessione a entrambi i nodi

Usiamo OmniDB per connetterci a entrambi i nodi PostgreSQL. Per prima cosa, inserisci le informazioni di connessione nella sezione Connessioni:

The Connections section with the connection form

Seleziona quindi entrambe le connessioni. Nota come OmniDB riconosce di essere connesso a PostgreSQL 10 e abilita un nuovo nodo nell’albero della connessione corrente: si chiama Replica logica. Al suo interno troviamo Pubblicazioni e Sottoscrizioni.

The Logical Replication node of the database tree

Creazione di una tabella di test su entrambi i nodi

Su entrambi i nodi, crea una tabella come questa:

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

Creazione di una pubblicazione sulla prima macchina

All’interno del nodo di connessione, espandi il nodo Replica logica, quindi fai clic destro sul nodo Pubblicazioni e scegli l’azione Crea Pubblicazione. OmniDB aprirà una scheda con un modello SQL contenente il comando CREATE PUBLICATION, pronto perché tu possa apportare le modifiche necessarie ed eseguirlo:

The CREATE PUBLICATION template

Dopo aver modificato ed eseguito il comando, puoi fare di nuovo clic destro sul nodo Pubblicazioni e selezionare l’azione Aggiorna. Vedrai che verrà creato un nuovo nodo con lo stesso nome assegnato alla pubblicazione. Espandendo questo nodo, potrai vedere i dettagli e le tabelle della pubblicazione:

A publication in the tree

Creazione di una sottoscrizione sulla seconda macchina

All’interno del nodo di connessione, espandi il nodo Replica logica, quindi fai clic destro sul nodo Sottoscrizioni e scegli l’azione Crea Sottoscrizione. OmniDB aprirà una scheda con un modello SQL contenente il comando CREATE SUBSCRIPTION, pronto perché tu possa apportare le modifiche necessarie ed eseguirlo:

The CREATE SUBSCRIPTION template

Dopo aver modificato ed eseguito il comando, puoi fare di nuovo clic destro sul nodo Sottoscrizioni e selezionare l’azione Aggiorna. Vedrai che verrà creato un nuovo nodo con lo stesso nome assegnato alla sottoscrizione. Espandendo questo nodo, potrai vedere i dettagli, le pubblicazioni referenziate e le tabelle della sottoscrizione:

A subscription in the tree

Inoltre, il comando CREATE SUBSCRIPTION ha creato uno slot di replica logica chiamato testsub (con lo stesso nome della sottoscrizione) sulla prima macchina:

Replication slots

Verifica della replica logica

Per verificare che la replica funzioni, creiamo alcuni dati sul nodo 1. Fai clic destro sulla tabella public.customers, quindi vai su Azioni sui Dati e fai clic sull’azione Modifica Dati. In questa griglia puoi aggiungere, modificare ed eliminare dati dalla tabella. Aggiungi 2 righe di esempio, così.

Quindi, sull’altro nodo, verifica che la tabella public.customers sia stata popolata automaticamente. Fai clic destro sulla tabella public.customers, quindi vai su Azioni sui Dati e fai clic sull’azione Interroga Dati:

Rows replicated to the second node

Come possiamo vedere, entrambe le righe create sulla prima macchina sono state replicate sulla seconda macchina. Questo ci conferma che la replica logica funziona correttamente.

Ora puoi eseguire altre azioni, come aggiungere/rimuovere tabelle dalla pubblicazione o creare una nuova pubblicazione che pubblichi tutte le tabelle.