Prima di tutto, dovresti usare timestamptz
invece di timestamp
ogni volta che si lavora con più fusi orari. Eviterei completamente il problema.
Dettagli:
puoi usa il AT TIME ZONE
costruire come @NuLo suggerisce
, potrebbe funzionano anche, ma non esattamente come descritto.
AT TIME ZONE
converte il tipo timestamp
(timestamp without time zone
) in timestamptz
(timestamp with time zone
) e viceversa. La rappresentazione testuale di un timestamptz
il valore dipende dall'impostazione corrente del fuso orario nella sessione in cui si esegue il comando. Questi due timestamptz
valori sono identici al 100 % (indicano lo stesso momento):
'2015-09-02 15:55:00+02'::timestamptz
'2015-09-02 14:55:00+01'::timestamptz
Ma la rappresentazione testuale non . Il display è per diversi fusi orari. Se prendi questa stringa letterale e la inserisci in un timestamp
digita, la parte del fuso orario viene semplicemente ignorata e finisci con diversi i valori. Quindi, se esegui il tuo COPY
dichiarazione in una sessione con la stessa impostazione del fuso orario del tuo timestamp
originale i valori sono per l'operazione suggerita succede lavorare.
Il modo più pulito, tuttavia, è produrre un timestamp
corretto valori per cominciare applicando AT TIME ZONE
due volte :
SELECT event AT TIME ZONE 'my_target_tz' AT TIME ZONE 'my_source_tz', ...
FROM logtable
ORDER BY event desc;
'my_target_tz'
è "il tuo fuso orario" e 'my_source_tz'
il fuso orario del server cloud nell'esempio. Per assicurarti che l'ora legale sia rispettata, usa nomi di fuso orario , non abbreviazioni di fuso orario. La documentazione:
Correlati:
- Contabilità dell'ora legale in Postgres, quando si selezionano gli elementi programmati
- I nomi di fuso orario con proprietà identiche producono risultati diversi se applicati al timestamp
Oppure, molto meglio ancora, usa timestamptz
ovunque e funziona correttamente automaticamente.