Versionierung/Historisierung

Hallo liebes Forum,

ich möchte gerne alle Datenbankeinträge historisieren, d.h. wenn ich eine Datenbankabfrage stelle möchte ich immer das aktuellste Element eines Eintrages haben. Wenn ich aber einen Timestamp (oder ähnliches) mitgebe, möchte ich den zu diesem Zeitpunkt gültigen Eintrag haben. Das heißt auch das gelöschte Element zu einem bestimmten Zeitpunkt noch existieren und neue Objekte zu älteren Zeitpunkten noch nciht existieren. Mir ist so als hätte ich zu diesem Thema einmal etwas gelesen und das Postgresql dieses bereits von Haus aus kann, nur “eben” entsprechend konfiguriert werden muss. Kann mir eventuell jemand die passenden Stichpunkte nennen, damit ich mich in die Materie besser einarbeiten kann. Ich vermute auch ganz stark, dass nicht alle Wünsche sofort umgesetzt werden können - möchte diese Funktionalität aber erstmal grundlegend verstehen und kennenlernen.
beste Grüße
Balli

Direkt und InCore geht das (noch) nicht. Was Du machen kannst: zu jedem Eintrag eine Spalte führen, die den Gültigkeitszeitraum beschreibt. TSRANGE als Datentyp böte sich an, und ein EXCLUSUIN CONSTRAINT darüber, daß es da keine Überschneidungen geben darf. Bei Update oder Delete speicherst den alten Datensatz dann z.B. in einer extra Tabelle mit eben dieser Spalte. In der eigentlichen Tabelle hast so den aktuellen Wert, in der Historien-Tabelle alle historischen Werte.

Das mal so als grobe Idee.

Hier ist ein Blogbeitrag der das Vorgehen etwas genauer beschreibt:

hach, der gute Hans :wink: