Synchron halten zweier PG-Datenbanken

Hallo Leute,
folgendes Szenario für das ich eine Lösung suche:
DB01 ist die Produktionsdatenbank. Alle Einträge in den Tabellen der Einträge werden in bestimmten Intervallen gelöscht!

DB02 ist die Analysedatenbank ( an einem anderen Standort). Diese Datenbank behält die Einträge über Jahre.

DB01 ist eine echte Teilmenge von DB02 mit seinen Tabelleneigenschaften. D.h Alle Tabellen von DB01 existieren in DB02 aber nicht alle DB02 Tabellen in DB01

Die Tabellen die sowohl auf DB01 und DB02 existieren sollen synchron gehalten werden. Allerdings sollen bestimmte Inhalte auf DB02 verändert werden

Lösung heute:
Das Problem wird aktuell so gelöst, dass ein Chronjob einmal die Minute schaut ob sich der Inhalt der Tabellen verändert hat und kopiert im Anschluss die Inhalte nach DB02.

Problem ist, das im Falle des Veränderns oder Hinzufügen von Tabellen das Script des Chronjobs mit geändert werden muss.

Kennt einer von euch einen eleganten Weg oder Tool für dieses Problem ?

Grüße und Danke

Du könntest die Tabellen via “logical replication” replizieren, die aber so konfigurieren, dass keine DELETE Statements repliziert werden. Wenn neue Tabellen hinzukommen, musst Du zwar die Publication und Subscription anpassen wenn Tabelle hinzukommen oder wegfallen.

Die logische Replikation ist außerdem wesentlich schneller und effizienter als alles was Du selber “stricken” kannst.

Danke dir!
Die logical replication hört sich schonmal nach einem großen Teil der Lösung für das Problem an.
Hast du vielleicht auch eine Idee um Schemaänderungen zu synchronisieren ?

P.S: Ich will nichts selber stricken… Deshalb suche ich nach alternativen zu dem was wir heute haben!

Grüße,

Wir machen alle Schemaänderungen über Liquibase - das lassen wir dann einfach auf allen Servern laufen. Man muss bei einigen Änderungen aber ein bisschen aufpassen weil die logische Replikation z.B. beim Umbenennen von Spalten nicht so richtig gut funktioniert.

Es gibt noch viele andere “Schema Migration Tools” neben Liquibase. Letztendlich ist es egal welches ihr verwendet, wichtig ist, dass man das gleiche Skript in allen Umgebungen (automatisiert) verwenden kann.