ich habe eine Anwendung bei der Binärdaten mit Zeitstempel (timestamp with time zone) per copy Befehl in die Datenbank eingefügt werden. Nun habe ich festgestellt, dass das Format des Zeitstempels in der Version 8.3.5 und 8.3.7 unterschiedlich ist. Kennt hier jemand genauere Details?
Test:
CREATE TABLE test
(
ts timestamp with time zone
)
insert into test(ts) values ('22.04.1976 09:15:00'::timestamp with time zone);
Dann auf der Kommandozeile:
psql -U postgres -c "copy test to stdout binary" testdb > c:\temp\data.dat
Den Test habe ich ohne Reboot gleich hintereinander gemacht. Dazu habe ich die eine PG-Version deinstalliert und gleich die neue installiert. Die Config-Files habe ich gelöscht, und jedes Mal die Datenbank mit UTF-8 erzeugt. Der Client war psql und dann per pipe in die Datei.
Wie kann ich die relevanten Rahmenbedingen vor dem Test validieren?
Könnte es sein, dass sich das Format von Double in Float gändert hat? Es werden ja Sekunden seit 1.1.2000 abgespeichert und die FF in der 8.3.7 sehen ganz nach einer negativen Zahl im Zweierkomplement aus, was meinst du?
Was mir grad einfällt, ich aber mangels Zeit grad die Doku dazu nicht finde: es gibt da wohl beim compilieren unterschiedliche Möglichkeiten, wie timestamps intern gespeichert werden, also mit welcher Genauigkeit.
Das sollte eigentlich nicht passieren, da dass auch dazu führt, das der Cluster einer vorherigen Minor-Version nicht mehr lesbar ist für die neue Version.
Ist mir selbst passiert, da ich auf WIn nur teste , war es nicht so schlimm.
Das pginstaller-projekt ist nicht davon betroffen, soweit ich weiß.
Vielen Dank für eure Antorten. Nun wäre es interessant vom Client aus nachsehen zu können, ob die gerade laufende Version doubles, oder integers für timestamps verwendet. Eine Möglichkeit wäre eine TempTable anzulegen und ein definiertes Datum reinzulegen, um danach nachzusehen, was drin steht. Aber vielleicht gibt es noch eine schönere Möglichkeit?