たくさん 後で値を更新するよりも、インポートセッションのタイムゾーンを設定する方が効率的です。
タイムゾーンは、テーブル内の変更されていない値に適用される設定のように考えているような印象を受けます。しかし、それはまったくそうではありません。入力/出力修飾子と考えてください。実際のtimestamp 値(タイムゾーンありまたはなし)は常に UTCタイムスタンプとして内部的に保存されます('2000-01-01 00:00'からの秒数 )。詳細:
UPDATE 2番目の例では、すべての行が無効になり、新しいバージョンが追加されるため、テーブルのサイズが2倍になります(これがUPDATEの方法です。 MVCC
で動作します Postgresで)。費用のかかる操作に加えて、VACUUM テーブルの膨満感をクリーンアップするために、後でさらに作業を行う必要があります。非常に非効率的です。
完全に安全 SETへ セッションのローカルタイムゾーン。これは、並行操作にはまったく影響しません。ところで、SET SESSION プレーンなSETと同じです SESSION とにかくデフォルトです。
絶対になりたい場合 確かに、設定を現在のトランザクションに制限することができます SET LOCALを使用 。マニュアルの
まとめる:
BEGIN;
SET LOCAL timezone = 'UTC';
COPY tabledata FROM 'c:\Users\Public\Downloads\test.csv' DELIMITERS ',' CSV;
COMMIT;
チェック:
SHOW timezone;