Nach dem Ändern der Tabelle Timestamptz für alle Zeitspalten zu verwenden, sehe ich sehr seltsames Verhalten, wenn wählen basierend auf Zeitbereich. Wenn die Zeitzone des Benutzers UTC ist, funktioniert es, das Ergebnis ist korrekt. Wenn die Zeitzone des Benutzers nicht UTC ist, ist das Ergebnis gleich Null. Ich würde erwarten, dass das Ergebnis nicht von der Zeitzone des Benutzers abhängt.Postgres Timestamptz Spalte und Benutzer Zeitzone
In Abfrage erkläre ich, dass Postgres Zeitkonstanten korrekt konvertieren. Im ersten Fall (UTC) es zeigt
'2016-07-25 07:00:00+00'::timestamp with timezone
'2016-07-25 08:00:00+00'::timestamp with timezone
Zweiter Fall (GB) zeigt
'2016-07-25 08:00:00+01'::timestamp with timezone
'2016-07-25 09:00:00+01'::timestamp with timezone
Was noch ungerade ist, ist es nicht vollständig nur funktioniert, wenn Zeitdifferenz eine Stunde. Wenn ich zwei Stunden lang von 8 Uhr morgens bis 10 Uhr morgens filtere, gibt die Abfrage ein Ergebnis ungleich Null zurück. Es funktioniert wie folgt
count(*) from 08:00 to 09:00 - zero
count(*) from 09:00 to 10:00 - zero
count(*) from 08:00 to 10:00 = actual count from 09:00 to 10:00
Es scheint, dass es einen Fehler in Bereich Konvertierungen gibt. Die Startzeit wird konvertiert, die Endzeit jedoch nicht.
Ich frage mich, ob jemand dieses Problem vorher gesehen hat. Postgres ist 9.3.4, läuft auf Ubuntu.
Definition von modified
Spalte
...
modified timestamp with time zone NOT NULL DEFAULT now(),
...
ERKLÄREN
Aggregate (cost=374.84..374.85 rows=1 width=0)
Output: count(*)
-> Index Only Scan using modified_idx on public.table1 (cost=0.56..362.14 rows=5079 width=0)
Output: modified
Index Cond: ((table1.modified >= '2016-07-25 08:00:00+01'::timestamp with time zone) AND (table1.modified < '2016-07-25 09:00:00+01'::timestamp with time zone))
Bitte zeigen Sie die Definition von 'table1'. Wenn die Spalte "Modified" vom Typ "Timestamp" ist, ändert sich ihre Bedeutung, wenn Sie die Zeitzone ändern. –
@LaurenzAlbe Ich habe Frage mit Spaltendefinition geändert – Alsin
Das sieht unmöglich aus. Kannst du die 'EXPLAIN (VERBOSE)' Ausgabe veröffentlichen? –