Postgresql 的timestamp数据类型分辨率为 1 微秒,范围为公元前 4713 年到公元 294276 年,占用 8 个字节(请参阅https://www.postgresql.org/docs/current/datatype-datetime.html)。
我计算出该范围内的总微秒数为 (294276 + 4713) \xc3\x97 365.25 \xc3\x97 24 \xc3\x97 60 \xc3\x97 60 \xc3\x97 1000000 = 9.435375266\xc3\x9710\xc2 \xb9\xe2\x81\xb8。这小于 2\xe2\x81\xb6\xe2\x81\xb4 = 1.844674407\xc3\x9710\xc2\xb9\xe2\x81\xb9,但也大于 2\xe2\x81\xb6\xc2\xb3 = 9.223372037\xc3\x9710\xc2\xb9\xe2\x81\xb8。
\n由于日历怪异和闰年,我可能会休息几天,但我认为这不足以将数字推到 2\xe2\x81\xb6\xc2\xb3 以下。
\n那么,为什么要这样选择限制呢?为什么不使用 64 位的全系列产品呢?
\n时间戳的内部表示以微秒为单位2000-01-01 00:00:00,存储为 8 字节整数。所以最大可能的年份是这样的
SELECT (2::numeric^63 -1) / 365.24219 / 24 / 60 / 60 / 1000000 + 2000;\n\n ?column? \n\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\n 294277.2726976055146158\n(1 row)\nRun Code Online (Sandbox Code Playgroud)\n这解释了上限。
\n最小值由以下注释解释src/include/datatype/timestamp.h:
SELECT (2::numeric^63 -1) / 365.24219 / 24 / 60 / 60 / 1000000 + 2000;\n\n ?column? \n\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\n 294277.2726976055146158\n(1 row)\nRun Code Online (Sandbox Code Playgroud)\n因此最小值取自儒略日期的下限。
\n