web-dev-qa-db-ja.com

タイムゾーンを持たないようにタイムゾーンなしのPostgresql更新タイムスタンプ

テーブルを作成すると、タイムゾーンのないTimestamp列が作成されました。インポートされた時間はすべてUTCです。次に、タイムゾーン情報を明示的に追加し、列を変更しました

ALTER TABLE review ALTER COLUMN review_time TYPE TIMESTAMP WITH TIME ZONE USING review_time AT TIME ZONE 'UTC';

既存のデータを選択しても、追加されたタイムゾーン情報は表示されません

review_time
2017-07-28 02:25:44
2017-07-28 03:10:35
2017-07-28 03:11:32
2017-07-28 03:11:35
2017-07-28 03:11:38
2017-07-28 03:11:41
2017-07-28 18:54:54

既存のデータに対してUPDATEステートメントを実行する必要がありますか?その場合、構文は何ですか?

アップデート1

タイムゾーン情報がない出力は、アプリケーション自体(SQLWorkbenchJ)が原因です。 psqlからクエリを実行すると、タイムゾーンが表示されます

mydb # SELECT review_time FROM review;
      review_time       
------------------------
 2017-08-20 08:00:02+08
 2017-07-27 00:45:33+08
 2017-07-27 00:45:37+08
 2017-07-28 02:24:03+08
 2017-07-28 02:24:27+08
 2017-07-28 02:24:31+08
 2017-07-28 02:25:31+08
3
hanxue

私も問題を見ません

サンプルデータを作成し、

CREATE TABLE foo(ts) AS VALUES (
  now()::timestamp without time zone
);

それを表示し、

TABLE foo;
             ts             
----------------------------
 2017-09-30 14:25:24.954084
(1 row)

上記では出力にtzがないことがわかります。次に、with time zoneを使用するように変更します。

ALTER TABLE foo
  ALTER COLUMN ts
  SET DATA TYPE timestamp with time zone;

これが出力です。tzが-05であることに注意してください

TABLE foo;

              ts               
-------------------------------
 2017-09-30 14:25:24.954084-05
(1 row)

SHOW TIME ZONEの結果はどうですか?

興味深いことに、私はあなたが話していることを理解しています。

# SELECT now()::timestamp with time zone::timestamp;
            now             
----------------------------
 2017-09-30 14:27:53.061616
(1 row)

ただし、私たちはあなたが何を求めているのかを知る必要があります。

2
Evan Carroll