timestamp with time zone
は、PostgreSQLにタイムゾーン情報を格納しません。取得時にセッションタイムゾーンに変換されるUTCタイムスタンプを格納します。
表示されるALTER TABLE
は、現在のセッションのタイムゾーンでtimestamp without time zone
の値を解釈するので、すべてのデータがEurope/London
タイムゾーンで解釈される場合、結果は正しいはずです。
タイムスタンプのタイムゾーンを保存する必要がある場合は、入力タイムゾーンを保持するには、タイムゾーンを別のフィールドとして保存する必要があります。私は自分のタイムゾーンを変更した場合
SHOW TimeZone;
┌───────────────┐
│ TimeZone │
├───────────────┤
│ Europe/Vienna │
└───────────────┘
(1 row)
CREATE TABLE mytime(
id integer PRIMARY KEY,
ts timestamp without time zone NOT NULL
);
INSERT INTO mytime VALUES (1, '2017-05-15 12:00:00');
SELECT * FROM mytime;
┌────┬─────────────────────┐
│ id │ ts │
├────┼─────────────────────┤
│ 1 │ 2017-05-15 12:00:00 │
└────┴─────────────────────┘
(1 row)
ALTER TABLE mytime ALTER ts TYPE timestamp with time zone;
SELECT * FROM mytime;
┌────┬────────────────────────┐
│ id │ ts │
├────┼────────────────────────┤
│ 1 │ 2017-05-15 12:00:00+02 │
└────┴────────────────────────┘
(1 row)
、変更表示された値:ALTER TABLEで新しいレコードを追加するまあ
SET TimeZone = 'Asia/Kolkata';
SELECT * FROM mytime;
┌────┬───────────────────────────┐
│ id │ ts │
├────┼───────────────────────────┤
│ 1 │ 2017-05-15 15:30:00+05:30 │
└────┴───────────────────────────┘
(1 row)
は次のように表示されます:「2017年5月15日14:12:19.26491+ 02 "タイムゾーンの変更後のテーブルで既存のレコードに何が起こっていないのか混乱しています –
値に何が問題なのですか? –
私は上記のように、上記のように表示されます:2017-05-14 05:47:43.523 + 00。新しいデータの日付フィールドを追加すると、2017-05-15 14:12:19.26491 + 02のようになります。私はちょうどタイムゾーンで変換された既存の日付かどうか確認したいですか? –