2015-08-25 8 views
5

Sagen wir, wir haben eine Datenbank für eine Busgesellschaft.Archivierung von Datensätzen aus der PostgreSQL-Datenbank, die die Zeitlinie übertreffen

  • Wir sammeln Daten über Busfahrten, Passagierlisten, Treibstoff usw.
  • Wir meist mit Daten über bevorstehende Fahrten arbeiten
  • Manchmal müssen wir in der Geschichte (für die Buchhaltung) sehen, aber der Zeitrahmen ist kurz (3 Monate bei max).
  • Wir möchten aus offensichtlichen Gründen (Speicherverschwendung, langsame Abfragen usw.) nicht alle Aufzeichnungen auf unseren Produktions-/Entwicklungsservern aufbewahren.
  • Wir wollen separate Datenbank haben, wo wir ganze Geschichte archivieren würden.
  • Was wäre der beste Weg, dies auf PostgreSQL zu erreichen?

Wir suchen etwas wie folgt aus:

  • Wir wollen Produktionsdatenbank (einschließlich Strukturänderungen, Sequenzen etc.) replizieren
  • Wir alten Daten aus der Produktion Datenbank löschen möchten, aber Schließen Sie diese Anweisungen von der Replikation aus, um das Archiv unverändert zu lassen.

Beispiel:

  • Wenn eine Busreise ist älter als 3 Monate, löschen Sie es aus der Produktion DB, aber es im Archiv DB halten, wo es ohnehin schon ist.

Was suchen wir in: (? Slony)

  • Eine Art Master/Slave-Replikation.
  • REPLICA RULE für bestimmte Tabellen ENABLE, wo wir mit einigen Zeitregeln (WHERE Datum < NOW() - Intervall '6 Monate) DELETE/UPDATE-Anweisungen ändern

Vielen Dank für Ihre Einsichten.

+1

Ich würde eine [Fremddaten Wrapper] (https://wiki.postgresql.org/wiki/Foreign_data_wrappers) mit einer Abfrage nach einem Zeitplan (Cron-Job oder ähnlich). Halte es einfach. Weniger Chance für Fehler oder Verwirrung auf diese Weise. – jpmc26

Antwort

0

Dies ist ein Bereich, in dem logische Replikation (so etwas wie Bucardo oder Slony) wirklich helfen kann, da Sie nur die gewünschten Tabellen replizieren und Ihre eigenen Trigger um sie herum verwalten können. In diesem Fall könnten Sie Trigger aktualisieren und löschen, um alte Versionen der Daten zu archivieren, so dass Sie darüber schauen können.

Natürlich können Sie dies auch mit Triggern in Ihrer Produktionsdatenbank tun und dann Fremddaten Wrapper verwenden, wie der Kommentar suggeriert. Aber wenn Sie diesen Weg gehen, könnten Sie auch in Erwägung ziehen, nach csv und dem Laden zu kopieren, so dass Sie eine Luftzwischenraum und eine Do-Transformationen haben, wenn es schließlich erforderlich ist.