Versionierung einer PostgreSQL Datenbank

Hi

ich habe einen recht simplen Versionierungsansatz für PostgreSQL Datenbanken entwickelt und würde gerne die Meinung von anderen PostgreSQL Experten dazu wissen. Mein Eintrag auf der pg-general Mailing List ging leider völlig unter.
Das Prinzip ist nicht völlig neu. Ich logge alle Änderungen in eine Tabelle und kann aus dieser den Datenbankzustand zu einem beliebigen früheren Zeitpunkt wieder herstellen. Ich nutze dafür vor allem JSON Funktionen von PostgreSQL.

Die Skripte sind hier zu finden: https://github.com/FxKu/audit

Bisher habe ich nur Test mit unmittelbar zurückliegenden Änderungen vorgenommen. Da lief die Wiederherstellung ziemlich gut.
Ich wäre echt sehr dankbar für ein Feedback. Ich habe das Feature zwar für ein bestimmtes DB-Produkt entwickelt, aber die Skripte so allgemein gehalten, dass alle PostgreSQL-User es nutzen können.
Evtl. gibt es auch schon eine ähnliche Lösung und ich habe sie bisher übersehen?

lg Felix

tablelog von ads: Log Table Changes in PostgreSQL with tablelog | Andreas 'ads' Scherbaum

Danke für den Link! Ich habs leider bisher nicht hinbekommen, mir aus dem Code eine Extension zu bauen und kann die Funktionsweise von ‘table_log’ nicht endgültig beurteilen. Ich sehe ein paar Engpässe für meine Anforderungen:

  • Was ist, wenn ich table_log für eine Tabelle initialisieren möchte, deren Primary Key mehrere Zeilen umfasst?
  • Laut einem Kommentar ist ein Restore einer Tabelle in einem anderen Schema angeblich nicht möglich.
  • Kein Logging von TRUNCATE Ereignissen.
  • Und soweit ichs im Quellcode erkennen kann, ist das Loggen und Restoring nicht komplett unabhängig von Veränderungen bei der Spaltenanzahl.

Vielleicht schaffe ich es noch ‘table_log’ zu testen und weiteres Feedback zu geben. Vielleicht hat der ein oder andere auch Feedback für mich :slight_smile:
Wenn ich sehe, was ads alles beim Ausführen der Funktionen überprüft, muss sicher auch noch einiges bei meinen Skripten robuster und ggf. flexibler gestaltet werden…

Zum Bauen einer Extension bin ich auch noch nicht gekommen. In dem Zuge würde ich das Modul gleich neu schreiben …