1. ホーム
  2. postgresql

[解決済み] PostgreSQLでタイムゾーンなしのtimestampをタイムゾーンありに変更する。

2023-07-11 23:25:12

質問

質問は簡単です。もし私がすでに timestamp 型のカラムに時間帯なしのデータを持っている場合、その型を timestamp with time zone に設定すると、postgresql はこのデータに対して何を行うのでしょうか?

どのように解決するのですか?

現在の値をlocaltimeで保持し、タイムゾーンをlocaltimeのオフセットに設定するのです。

create table a(t timestamp without time zone, t2 timestamp with time zone);
insert into a(t) values ('2012-03-01'::timestamp);
update a set t2 = t;
select * from a;
          t          |           t2           
---------------------+------------------------
 2012-03-01 00:00:00 | 2012-03-01 00:00:00-08

alter table a alter column t type timestamp with time zone;
select * from a;
           t            |           t2           
------------------------+------------------------
 2012-03-01 00:00:00-08 | 2012-03-01 00:00:00-08

のマニュアルによると テーブルを変更する :

もし [USING句が]である場合 が省略された場合、デフォルトの変換は古いデータ型から新しいデータ型への代入キャストと同じになります。

のマニュアルによると 日付/時間タイプ

以下の変換 タイムスタンプ(タイムゾーンなし タイムスタンプ(タイムゾーンあり は、通常 タイムゾーンを含まないタイムスタンプ という値を取るか与えるべきです。 タイムゾーン ローカルタイムで指定します。異なるタイムゾーンを指定する場合は AT TIME ZONE .