すべての日時を保存していますw。タイムゾーン情報ですが、これはたまたま Postgres で米国/東部タイムゾーン (そうです、UTC であるべきだったはずです) に設定されています。
ここにはいくつかの誤解があります。
データ型はtimestamp
PostgreSQL で呼び出されます。「datetime」という型はありません。
timestamp
の略ですtimestamp without time zone
。
timestamptz
の略ですtimestamp with time zone
。
マニュアルが通知するように:
timestamp
値は、2000 年 1 月 1 日午前 0 時前後の秒数として保存されます。
Unix エポック1970-01-01 00:00 UTCで 30 年前に始まる Posix 時間に似ています。の場合timestamp
、ローカル 2000-01-01 00:00
が想定されます。timestamptz
参考までに、表示は2000-01-01 00:00 UTC
入力と出力の現在のセッションのタイム ゾーン オフセットに合わせて調整されます。
timestamp with time zone
一意の時点を保存します。タイムスタンプ (タイム ゾーンの有無にかかわらず) を UTC 以外のタイム ゾーンに内部的に「設定」することはできません。タイム ゾーン オフセット自体はまったく保存されません。入力/出力をUTCに調整するためにのみ使用されます。
タイムスタンプ値の表現では、現在のセッションのタイム ゾーン設定が考慮されます。
- それに応じて値を表示します (出力)。
timestamp without time zone
aを正しく解釈する(入力)。
良いニュース: 移行は、積極的に台無しにしない限り、箱から出してすぐに動作するはずです。
例とリンクを含む Postgres タイムスタンプの詳細な説明:
クエリの例
次のステートメントを試してください (一度に 1 ブロックずつ)。そして、あなたのコラムでも試してみてください:
SHOW timezone;
SELECT '2011-05-24 11:17:11.533479-05'::timestamptz(0);
SELECT '2011-05-24 11:17:11-05'::timestamptz;
SET timezone='UTC';
SELECT '2011-05-24 11:17-05'::timestamptz;
SELECT '2011-05-24 11:17-05'::timestamptz AT TIME ZONE 'UTC';
SELECT '2011-05-24 11:17-05'::timestamptz AT TIME ZONE 'UTC' AT TIME ZONE 'UTC';
RESET timezone;