# Versionierung/Historisierung

**URL:** <https://www.pg-forum.de/t/versionierung-historisierung/521>\
**Category:** Konfiguration\
**Created:** [21. Februar 2019 um 08:15 UTC](https://www.pg-forum.de/t/versionierung-historisierung/521 "2019-02-21T08:15:52Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![ballibum](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/b/e495f1/32.png) [@ballibum](https://www.pg-forum.de/u/ballibum)\
**Post date:** [21. Februar 2019 um 08:15 UTC](https://www.pg-forum.de/t/versionierung-historisierung/521/1 "2019-02-21T08:15:52Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![akretschmer](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@akretschmer](https://www.pg-forum.de/u/akretschmer)\
**Post date:** [21. Februar 2019 um 08:25 UTC](https://www.pg-forum.de/t/versionierung-historisierung/521/2 "2019-02-21T08:25:45Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![castorp](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/c/e99b99/32.png) [@castorp](https://www.pg-forum.de/u/castorp)\
**Post date:** [21. Februar 2019 um 10:59 UTC](https://www.pg-forum.de/t/versionierung-historisierung/521/3 "2019-02-21T10:59:12Z")

</div>

Hier ist ein Blogbeitrag der das Vorgehen etwas genauer beschreibt:

> **[Implementing “AS OF”-queries in PostgreSQL - Cybertec](https://www.cybertec-postgresql.com/en/implementing-as-of-queries-in-postgresql/)**
>
> Many databases such as Oracle provide "AS OF" queries (timetravel). This blog explains how to do time travel in PostgreSQL.

---

<div class="post-metadata">

**Author:** ![akretschmer](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@akretschmer](https://www.pg-forum.de/u/akretschmer)\
**Post date:** [21. Februar 2019 um 11:12 UTC](https://www.pg-forum.de/t/versionierung-historisierung/521/4 "2019-02-21T11:12:48Z")

</div>

hach, der gute Hans 😉

---

<div class="post-metadata">

**Author:** ![system](https://www.pg-forum.de/uploads/default/original/1X/dc97a981dd26692d5fb52e8b8fc7c090d7b9559a.png) [@system](https://www.pg-forum.de/u/system)\
**Post date:** [21. Februar 2021 um 06:48 UTC](https://www.pg-forum.de/t/versionierung-historisierung/521/5 "2021-02-21T06:48:54Z")

</div>


