You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL:特定时区早于对应年份的时间转timestamptz时区错误

PostgreSQL旧时区历史数据转换错误的原因分析

你遇到的这类早期年份时区偏移计算错误,核心原因是PostgreSQL依赖的tzdata(IANA时区数据库)版本过旧。

PostgreSQL本身不维护时区规则,完全依赖tzdata提供的时区历史变更数据。在你使用的14至15.3版本中,默认捆绑的tzdata版本相对老旧:

  • 像Antarctica/Syowa时区的UTC+3偏移规则,是在后续的tzdata更新中才补充完善了1947年及更早的历史偏移定义;
  • Asia/Aqtau(1931年前)、Indian/Comoro(1943年前)等时区的早期历史偏移错误,也是因为旧版tzdata中没有正确记录这些时区的历史规则,后续tzdata版本才修正了这些问题。

简单验证当前tzdata版本的方式:

  • 在PostgreSQL中执行:SELECT pg_tz_version(); 可直接查看当前使用的tzdata版本号
  • Linux系统层面可以用zdump -v Antarctica/Syowa | grep 1947 查看该时区1947年的偏移规则

解决这类问题的直接方案:

  • 升级PostgreSQL到更新的版本(比如15.4及以上、16.x系列),这些版本捆绑了更新的tzdata,包含修正后的时区历史规则;
  • 若无法升级PostgreSQL,可手动更新系统的tzdata数据库,然后重新初始化PostgreSQL的时区数据(具体操作需参考对应系统和PostgreSQL版本的文档)。

内容的提问来源于stack exchange,提问作者drewango

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:05:58