.NET

Logická replikace

PostgreSQL 10 zavádí nativní logickou replikaci, která používá model publikace/odběru, takže si na straně upstream (neboli publisher) můžeme vytvářet publikace a na straně downstream (neboli subscriber) odběry. Více podrobností najdete v dokumentaci PostgreSQL.

V této kapitole si nativní logickou replikaci PostgreSQL 10 předvedeme na clusteru se 2 uzly. Na každé instanci PostgreSQL je potřeba nastavit wal_level = logical a zároveň upravit soubor pg_hba.conf tak, aby mezi oběma uzly udělil přístup pro replication.

Vytvoření testovacího prostředí

Sestavte si dvě instance PostgreSQL 10+ libovolným způsobem, který vám vyhovuje (Docker, virtuální stroj, nebo třeba i dvě databáze na jednom počítači) a na obou nastavte výše uvedené parametry.

Připojení k oběma uzlům

K připojení k oběma uzlům PostgreSQL použijeme OmniDB. Nejprve vyplňte informace o připojení v sekci Connections:

The Connections section with the connection form

Poté vyberte obě připojení. Všimněte si, že OmniDB rozpozná připojení k PostgreSQL 10 a zpřístupní ve stromovém zobrazení aktuálního připojení nový uzel nazvaný Logical Replication. Uvnitř najdeme uzly Publications a Subscriptions.

The Logical Replication node of the database tree

Vytvoření testovací tabulky na obou uzlech

Na obou uzlech vytvořte tabulku takto:

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

Vytvoření publikace na prvním počítači

Uvnitř uzlu připojení rozbalte uzel Logical Replication, poté klikněte pravým tlačítkem na uzel Publications a zvolte akci Create Publication. OmniDB otevře záložku se SQL šablonou obsahující příkaz CREATE PUBLICATION připravený k úpravám a spuštění:

The CREATE PUBLICATION template

Po úpravě a spuštění příkazu můžete znovu kliknout pravým tlačítkem na uzel Publications a zvolit akci Refresh. Uvidíte, že se vytvořil nový uzel se stejným názvem, jaký jste dali publikaci. Rozbalením tohoto uzlu uvidíte podrobnosti a tabulky patřící k publikaci:

A publication in the tree

Vytvoření odběru na druhém počítači

Uvnitř uzlu připojení rozbalte uzel Logical Replication, poté klikněte pravým tlačítkem na uzel Subscriptions a zvolte akci Create Subscription. OmniDB otevře záložku se SQL šablonou obsahující příkaz CREATE SUBSCRIPTION připravený k úpravám a spuštění:

The CREATE SUBSCRIPTION template

Po úpravě a spuštění příkazu můžete znovu kliknout pravým tlačítkem na uzel Subscriptions a zvolit akci Refresh. Uvidíte, že se vytvořil nový uzel se stejným názvem, jaký jste dali odběru. Rozbalením tohoto uzlu uvidíte podrobnosti, odkazované publikace a tabulky patřící k odběru:

A subscription in the tree

Příkaz CREATE SUBSCRIPTION navíc na prvním počítači vytvořil slot logické replikace nazvaný testsub (stejný název jako odběr):

Replication slots

Test logické replikace

Abychom ověřili, že replikace funguje, vytvořme na uzlu 1 nějaká data. Klikněte pravým tlačítkem na tabulku public.customers, najeďte na Data Actions a klikněte na akci Edit Data. V této tabulce můžete do tabulky přidávat, upravovat a odstraňovat data. Přidejte 2 ukázkové řádky, takto.

Poté na druhém uzlu ověřte, zda se tabulka public.customers automaticky naplnila. Klikněte pravým tlačítkem na tabulku public.customers, najeďte na Data Actions a klikněte na akci Query Data:

Rows replicated to the second node

Jak vidíme, oba řádky vytvořené na prvním počítači byly replikovány na druhý počítač. To nám říká, že logická replikace funguje.

Nyní můžete provádět další akce, jako je přidávání/odebírání tabulek z publikace nebo vytvoření nové publikace, která publikuje všechny tabulky.