Liquibase, Postgres und die Timezone
Postgres kennt verschiedene Datums- und Zeittypen, davon berücksichtigen einige Datentypen die Zeitzone, andere nicht. Liquibase selbst verwendet intern sogenannte DateTime Felder die für Postgres in den "Timestamp with Timezone" Datentyp konvertiert werden. Je nach Anforderung kann dies ggf. nicht gewünscht sein, in unserem Fall führte dies javascript-seitig zu einem Problem da das Datum nicht korrekt geparst werden konnte. Das Verhalten von Liquibase wurde im Bugtracker schon bemängelt, eine Lösung ist aktuell leider nicht in Sicht. Allerdings existiert ein work-a-round der wie folgt problemlos funktioniert: Einfach einer einer createTable Anweisung folgendes modifySQL Statement anhängen um das intern in Liquibase generierte SQL etwas zu modifizieren:
<modifySql dbms="postgresql"> <replace replace="TIMESTAMP WITH TIME ZONE" with="TIMESTAMP WITHOUT TIME ZONE"/></modifySql>
Nutzt man nun für Datumsfelder wie gewohnt den DateTime Typ wird Liquibase im Falle einer Postgres Datenbank die Ersetzung vornehmen, für andere Datenbanken bleibt das ursprüngliche Verhalten bestehen. Man behält somit (theoretisch) die Möglichkeit die Liquibase Changesets in unterschiedliche RDBM Systeme problemlos einspielen zu können.