Erstellen einer inkrementellen Datenbankkopie in PostgreSQL

7

Mit Software für virtuelle Maschinen wie VirtualBox können inkrementelle VM-Klone erstellt werden. Das heißt, Daten werden nach dem "Berühren" (geöffnet und beschreibbar geöffnet) kopiert und im inkrementellen Cache des neuen Klons gespeichert.

Ich suche nach der gleichen Option für ein Postgres-DBMS.

Wie kann ich eine inkrementelle Datenbankkopie einrichten, bei der Einträge aus der Originaldatenbank gelesen und Zeilen aus der lokalen Kopie berührt / geändert werden?

Wie kann ich ein solches Verhalten auf Dateisystem- / Speicherebene mithilfe einer separaten DBMS-Instanz emulieren, wenn dies nicht auf DBMS-Ebene erfolgt?

Hintergrund: Die Idee ist, den leistungsstarken Datenbankserver zu verwenden, ohne jedoch viel Ressourcenaufwand für eine inszenierte / Entwickler-Datenbankkopie zu verursachen.

Lorenz Lo Sauer
quelle
2
Sie suchen nach Replikation des Protokollversands: postgresql.org/docs/current/static/warm-standby.html
a_horse_with_no_name

Antworten:

6

So etwas gibt es eigentlich nicht.

Sie können verwenden pg_basebackupoder pg_dumpzu kopieren , die Original - DB, aber es gibt keine Copy-on-Write - Anlage. Die integrierte Replikation erfordert eine Kopie, die nichts gemeinsam nutzt, und die Replikate sind schreibgeschützt.

Sie können Replikationsoptionen von Drittanbietern wie Londiste oder Slony-I verwenden, um den Status des Masters auf die Entwicklungscomputer zu replizieren. Diese Systeme sind jedoch etwas fragil, befassen sich nicht mit der DDL-Replikation und können erhebliche Auswirkungen auf den Master-Server haben Performance.

Zukünftige PostgreSQL-Versionen werden hoffentlich eine logische Log-Streaming-Replikation haben, die näher an Ihren Wünschen liegt. Es existiert jetzt als Patch für den Quellcode, aber zum Zeitpunkt des Schreibens (S. 9.3 Release) befindet es sich in der Alpha-Entwicklungsphase, wo es für einige Verwendungszwecke validiert wurde, jedoch nicht für den allgemeinen Gebrauch.

Ich würde wahrscheinlich ein oder zwei Schichten nach unten gehen. Ich würde Snapshots zum Kopieren und Schreiben von Dateisystemen oder sogar Images von virtuellen Maschinen zum Kopieren beim Schreiben verwenden, um das zu erreichen, was Sie wollen.

Craig Ringer
quelle
Vielen Dank. Ich fand auch Ihre Antwort nützlich: stackoverflow.com/questions/17069163/… . Was halten Sie von Triggern, um alle CUD-Operationen in eine andere Datenbank oder in kopierte Tabellen zu spiegeln?
Lorenz Lo Sauer
1
@LoSauer Genau das machen Londiste und Slony-I. Es ist schwieriger als es aussieht, versuchen Sie nicht, es selbst zu schreiben. Optionen finden Sie unter wiki.postgresql.org/wiki/… . Dem Master wird eine nicht triviale Last hinzugefügt, die Replikate müssen immer aktiv sein, und DDL-Änderungen sind schmerzhaft.
Craig Ringer
3

Delphix virtualisiert Postgres sowie Oracle und SQL Server. Delphix ist eine Software, die als VM ausgeführt wird. Delphix stellt eine Verbindung zu einer Quellendatenbank her und sammelt einen sogenannten "Zeitfluss". Ein Zeitablauf ist die Erfassung von Daten aus der Quellendatenbank, mit der Delphix Klone auf einem Zielcomputer überall in einem vom Zeitablauf abgedeckten Zeitfenster hochfahren kann. Der Zeitablauf beträgt standardmäßig zwei Wochen. Daten, die älter als die zwei Wochen sind und nicht verwendet werden, werden gelöscht. Delphix sieht für die Zieldatenbanken, die Klone, wie ein NAS aus. Neue Klone verweisen nur auf vorhandene Datenblöcke in Delphix, sodass neue Klone keinen neuen Speicherplatz beanspruchen und in wenigen Minuten erstellt werden können. Die Klone können innerhalb von Minuten von der Quelle aus aktualisiert, verzweigt werden, um eine Datensteuerung zu erstellen, die Daten enthält, wie die Quellcodeverwaltung zu codieren ist, und können zurückgesetzt werden, um destruktive QS-Tests immer wieder ausführen zu können.

Sie können eine kostenlose Version von Delphix hier herunterladen: http://datavirtualizer.com/delphix-express-installation/

Vollständige Offenlegung: Ich arbeite bei Delphix

Kyle Hailey
quelle