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.