sql >> データベース >  >> RDS >> PostgreSQL

'COPY .. TO ..'中に、指定されたタイムゾーンのタイムスタンプを現地時間に変換します。

    まず、 timestamptzを使用する必要があります timestampの代わりに 複数のタイムゾーンで作業するときはいつでも。問題を完全に回避できます。

    詳細:

    できます AT TIME ZONEを使用します @NuLoが提案する のような構成 、可能性があります 動作することもありますが、説明どおりではありません。

    AT TIME ZONE タイプtimestampを変換します (timestamp without time zone )からtimestamptztimestamp 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を使用します どこでも自動的に正しく機能します。




    1. 配列とそのキーをデータベースに保存する効率的な方法

    2. 修正ORA-02273:この一意/主キーは一部の外部キーによって参照されています

    3. mysqlテーブルの親ツリー(whileループ)

    4. サブクエリエラーとxmllaggを使用した値が多すぎます