In der Produktion ist unsere Datenbank einige hundert Gigabyte groß. Für die Entwicklung und das Testen müssen wir Snapshots dieser Datenbank erstellen, die funktional gleichwertig sind, aber nur 10 oder 20 Gigs groß sind.
Die Herausforderung besteht darin, dass die Daten für unsere Geschäftseinheiten auf viele Tabellen verteilt sind. Wir möchten eine Art gefilterten Snapshot erstellen, damit nur einige der Entitäten im Dump enthalten sind. Auf diese Weise können wir jeden Monat neue Schnappschüsse für Entwickler und Tests erhalten.
Angenommen, wir haben Entitäten mit diesen vielen-zu-vielen-Beziehungen:
- Das Unternehmen hat N Abteilungen
- Abteilung hat N Mitarbeiter
- Mitarbeiter hat N Anwesenheitslisten
Es gibt vielleicht 1000 Unternehmen, 2500 Abteilungen, 175000 Mitarbeiter und zig Millionen Anwesenheitslisten. Wir möchten eine reproduzierbare Methode, um beispielsweise die ersten 100 Unternehmen und alle ihre Unternehmensbereiche, Mitarbeiter und Anwesenheitslisten abzurufen .
Derzeit verwenden wir pg_dump für das Schema und führen dann pg_dump mit --disable-triggers und --data-only aus, um alle Daten aus den kleineren Tabellen abzurufen. Wir möchten keine benutzerdefinierten Skripte schreiben müssen, um einen Teil der Daten abzurufen, da wir einen schnellen Entwicklungszyklus haben und befürchten, dass die benutzerdefinierten Skripte fragil und wahrscheinlich veraltet sind.
Wie können wir das machen? Gibt es Tools von Drittanbietern, mit denen logische Partitionen aus der Datenbank abgerufen werden können? Wie heißen diese Tools?
Jeder allgemeine Rat auch geschätzt!
quelle
\copy
stattdessenCOPY
auch verwenden, da letzteres nur für Superuser gedacht war. Zum Glück hat alles andere perfekt funktioniert, ohne dass in 9.1 weitere Änderungen vorgenommen wurden.Ich kenne keine Software, die dies bereits tut, aber ich kann mir 3 alternative Lösungen vorstellen. Leider erfordern alle eine benutzerdefinierte Codierung.
Erstellen Sie alle Tabellen in einem separaten Schema neu und kopieren Sie dann nur die Teilmenge der Daten, die Sie sichern möchten, in diese Tabellen. Verwenden Sie diese
INSERT INTO copy.tablename SELECT * FROM tablename WHERE ...
und geben Sie sie aus.Schreiben Sie Ihr eigenes Skript zum Speichern von Daten als SQL-Anweisungen. Ich habe diesen Ansatz in der Vergangenheit verwendet und es dauerte nur etwa 20-30 Zeilen PHP.
Ändern Sie pg_dump so, dass beim Speichern einer einzelnen Tabelle eine Bedingung zusammen mit dem Schalter -t akzeptiert wird.
quelle
http://jailer.sourceforge.net/ macht das.
quelle
how
Ihrer Verwendung dieses Tools hinzugefügt haben , können wir möglicherweise verstehen, wie es das Ziel erreicht