.NET

Logische Replikation

PostgreSQL 10 führt native logische Replikation ein, die auf einem Publish/Subscribe-Modell basiert, sodass wir auf der vorgelagerten Seite (Publisher) Publikationen und auf der nachgelagerten Seite (Subscriber) Abonnements erstellen können. Weitere Details finden Sie in der PostgreSQL-Dokumentation.

In diesem Kapitel verwenden wir einen Cluster aus zwei Knoten, um die native logische Replikation von PostgreSQL 10 zu demonstrieren. Beachten Sie, dass Sie auf jeder PostgreSQL-Instanz wal_level = logical konfigurieren und außerdem die Datei pg_hba.conf anpassen müssen, um replication-Zugriff zwischen den beiden Knoten zu gewähren.

Testumgebung erstellen

Richten Sie zwei PostgreSQL-10+-Instanzen nach Belieben ein (Docker, eine virtuelle Maschine oder auch zwei Datenbanken auf derselben Maschine) und konfigurieren Sie auf jeder die oben genannten Einstellungen.

Mit beiden Knoten verbinden

Verbinden wir uns mit OmniDB mit beiden PostgreSQL-Knoten. Füllen Sie zunächst die Verbindungsinformationen in der Verbindungsübersicht aus:

Wählen Sie dann beide Verbindungen aus. Beachten Sie, wie OmniDB erkennt, dass es mit PostgreSQL 10 verbunden ist, und einen neuen Knoten in der aktuellen Verbindungsbaumansicht aktiviert: Logical Replication (Logische Replikation). Darin sehen wir Publications (Publikationen) und Subscriptions (Abonnements).

Testtabelle auf beiden Knoten erstellen

Erstellen Sie auf beiden Knoten eine Tabelle wie diese:

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

Publikation auf der ersten Maschine erstellen

Erweitern Sie innerhalb des Verbindungsknotens den Knoten Logical Replication, klicken Sie dann mit der rechten Maustaste auf den Knoten Publications und wählen Sie die Aktion Create Publication (Publikation erstellen). OmniDB öffnet einen SQL-Vorlagen-Tab mit dem Befehl CREATE PUBLICATION, bereit für ein paar Anpassungen und zur Ausführung:

Nach dem Anpassen und Ausführen des Befehls können Sie erneut mit der rechten Maustaste auf den Knoten Publications klicken und die Aktion Refresh (Aktualisieren) auswählen. Sie sehen, dass ein neuer Knoten mit demselben Namen angelegt wird, den Sie der Publikation gegeben haben. Erweitern Sie diesen Knoten, um die Details und die Tabellen der Publikation einzusehen:

Abonnement auf der zweiten Maschine erstellen

Erweitern Sie innerhalb des Verbindungsknotens den Knoten Logical Replication, klicken Sie dann mit der rechten Maustaste auf den Knoten Subscriptions und wählen Sie die Aktion Create Subscription (Abonnement erstellen). OmniDB öffnet einen SQL-Vorlagen-Tab mit dem Befehl CREATE SUBSCRIPTION, bereit für ein paar Anpassungen und zur Ausführung:

Nach dem Anpassen und Ausführen des Befehls können Sie erneut mit der rechten Maustaste auf den Knoten Subscriptions klicken und die Aktion Refresh auswählen. Sie sehen, dass ein neuer Knoten mit demselben Namen angelegt wird, den Sie dem Abonnement gegeben haben. Erweitern Sie diesen Knoten, um die Details, die referenzierten Publikationen und die Tabellen des Abonnements einzusehen:

Außerdem hat der Befehl CREATE SUBSCRIPTION auf der ersten Maschine einen logischen Replikationsslot namens testsub erzeugt (denselben Namen wie das Abonnement):

Logische Replikation testen

Um zu prüfen, ob die Replikation funktioniert, erstellen wir einige Daten auf Knoten 1. Klicken Sie mit der rechten Maustaste auf die Tabelle public.customers, gehen Sie dann zu Data Actions und klicken Sie auf die Aktion Edit Data (Daten bearbeiten). In diesem Raster können Sie Daten der Tabelle hinzufügen, bearbeiten und entfernen. Fügen Sie 2 Beispieldatensätze hinzu, etwa so:

Prüfen Sie anschließend auf dem anderen Knoten, ob die Tabelle public.customers automatisch befüllt wurde. Klicken Sie mit der rechten Maustaste auf die Tabelle public.customers, gehen Sie dann zu Data Actions und klicken Sie auf die Aktion Query Data:

Wie wir sehen können, wurden beide auf der ersten Maschine erstellten Datensätze auf die zweite Maschine repliziert. Das zeigt uns, dass die logische Replikation funktioniert.

Sie können nun weitere Aktionen durchführen, etwa Tabellen zur Publikation hinzufügen bzw. daraus entfernen oder eine neue Publikation erstellen, die alle Tabellen veröffentlicht.