FOSSGIS2015 - 29_2015_03_23

FOSSGIS 2015
Konferenz für freie und Open Source-Software im GIS-Bereich und für freie Geodaten

Referenten
Felix Kunde
Programm
Tag Donnerstag - 2015-03-12
Raum S10
Beginn 15:00
Dauer 00:30
Info
ID 871
Veranstaltungstyp Vortrag
Track Vorträge (GIS)
Sprache der Veranstaltung deutsch
Recordings

PostGIS Memento

Versionierung von PostGIS-Datenbanken

Memento. Gibt es nicht einen Film, der so heißt? Jemand, der kein Gedächtnis hat und sich alle Ereignisse aufschreibt? Zumindest geht es bei pgMemento darum. pgMemento zeichnet alle Veränderungen in einer PostgreSQL Datenbank auf und erlaubt die Wiederherstellung beliebiger frühere Zeitstände.

pgMemento ist ein neues Projekt, dass einen Ansatz Datenbanken zu versionieren vorschlägt. Alle Veränderungen werden mittels Triggern in einer Log-Tabelle als JSON-Fragmente aufgezeichnet. Durch den Einsatz von JSON ist es egal, wie die Tabelle beschaffen ist und ob sie sich über die Zeit strukturell verändert hat. Mittels einer zusätzlichen ID-Spalte wird der Bezug zu allen Versionen einer Zeile hergestellt. So können beliebige frühere Zeitstände eines Tabellentupels ganz einfach wieder hergestellt werden. Mit den JSON-Funktionen von PostgreSQL können auch komplexe Datentypen wie PostGIS-Geometrien verarbeitet werden. Das Erstellen von früheren Versionen der Datenbank erfolgt in separaten Schemata und nicht in der Produktionsdatenbank selbst.

Wen ein Blick in die Vergangenheit der Datenbank interessiert, der stößt vielleicht auch auf Informationen, die im Zuge eines Anwenderfehlers irgendwann einmal verloren gegangen aber eigentlich noch gültig sind. Da pgMemento zu jedem Log-Eintrag auch stets die dazugehörige Transaktion protokolliert, könnten alle Veränderungen einer Transaktion wieder rückgängig gemacht werden. Seien es einfache Update-Befehle oder Löschvorgänge. Das komplette Zurücksetzen der Datenbank zu einem bestimmten Zeitstempel wäre also nicht notwendig. Dieses Feature muss jedoch erst noch entwickelt werden.

pgMemento ist komplett in PL/pgSQL programmiert, d.h. die Versionierungslogik ist für jeden Nutzer transparent und es kann sehr einfach in bestehende Datenbanken eingebunden werden.