ablog

不器用で落着きのない技術者のメモ

PostgreSQL の timestamp without timezone の最大値

PostgreSQL 12.4 の timestamp without timezone の最大値は AD 294276 年。

$ psql "host=aurora-postgres124.cluster-********.ap-northeast-1.rds.amazonaws.com user=awsuser dbname=postgres port=5432"
psql (13.4, server 12.4)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=> create table timezone_test (id varchar(10), ts_wo_tz timestamp without time zone);
CREATE TABLE
postgres=>
postgres=> insert into timezone_test(id, ts_wo_tz) values ('1', '209999-08-16 00:00:00.000000');
INSERT 0 1
postgres=> select * from timezone_test;
 id |       ts_wo_tz
----+-----------------------
 1  | 209999-08-16 00:00:00
(1 row)

postgres=> insert into timezone_test(id, ts_wo_tz) values ('2', '294276-12-31 00:00:00.000000');
INSERT 0 1
postgres=> insert into timezone_test(id, ts_wo_tz) values ('3', '294277-12-31 00:00:00.000000');
ERROR:  timestamp out of range: "294277-12-31 00:00:00.000000"
LINE 1: ...ert into timezone_test(id, ts_wo_tz) values ('3', '294277-12...
                                                             ^
postgres=> select * from timezone_test;
 id |       ts_wo_tz
----+-----------------------
 1  | 209999-08-16 00:00:00
 2  | 294276-12-31 00:00:00
(2 rows)

環境

参考

表8.9 日付/時刻データ型

型名 格納サイズ 説明 最遠の過去 最遠の未来 精度
timestamp [ (p) ] [ without time zone ] 8 バイト 日付と時刻両方(時間帯なし) 4713 BC 294276 AD 1マイクロ秒
timestamp [ (p) ] with time zone 8バイト 日付と時刻両方、時間帯付き 4713 BC 294276AD 1マイクロ秒
8.5. 日付/時刻データ型