まず、 timestamptz
を使用する必要があります timestamp
の代わりに 複数のタイムゾーンで作業するときはいつでも。問題を完全に回避できます。
詳細:
できます AT TIME ZONE
を使用します @NuLoが提案する
のような構成 、可能性があります 動作することもありますが、説明どおりではありません。
AT TIME ZONE
タイプtimestamp
を変換します (timestamp without time zone
)からtimestamptz
(timestamp with time zone
) およびその逆。 テキスト表現 timestamptz
の 値は現在の設定によって異なります コマンドを実行するセッションのタイムゾーンの。これらの2つのtimestamptz
値 100%同一です(同じ時点を示します):
'2015-09-02 15:55:00+02'::timestamptz
'2015-09-02 14:55:00+01'::timestamptz
ただし、テキスト表現はではありません 。表示はさまざまなタイムゾーン用です。この文字列リテラルを取得してtimestamp
にフィードすると タイプの場合、タイムゾーン部分は無視されます そして、あなたは異なるになってしまいます 値。したがって、COPY
を実行すると 元のtimestamp
と同じタイムゾーン設定のセッションでのステートメント の値は、推奨される操作が発生するためのものです。 働くために。
ただし、クリーンな方法は、正しいtimestamp
を生成することです。 AT TIME ZONE
を適用することで始まる値 2回 :
SELECT event AT TIME ZONE 'my_target_tz' AT TIME ZONE 'my_source_tz', ...
FROM logtable
ORDER BY event desc;
'my_target_tz'
は「独自のタイムゾーン」であり、'my_source_tz'
例のクラウドサーバーのタイムゾーン。 DSTが尊重されるようにするには、タイムゾーン名を使用します 、タイムゾーンの略語ではありません。 ドキュメント:
関連:
または、さらに良いことに、timestamptz
を使用します どこでも自動的に正しく機能します。