.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 tabulce připojení:

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.

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í:

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:

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í:

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:

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):

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:

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.