跳转到主要内容

22015 — interval_field_overflow

PostgreSQL SQLSTATE 22015 的来源与诊断参考。

速览

interval 输入字段超出 interval 解码器接受的范围。PostgreSQL 18.6 将这一日期时间解析条件映射为 SQLSTATE 22015;后续 interval 构造或算术运算可能使用其他范围码。

字段
SQLSTATE 22015
条件名 interval_field_overflow
状态 有效
已知存在于 7.4
锁定快照 9.0.23, 9.1.24, 9.2.24, 9.3.25, 9.4.26, 9.5.25, 9.6.24, 10.23, 11.22, 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3
ERRCODE_INTERVAL_FIELD_OVERFLOW
别名

含义

固定的 interval_in 路径先解析输入,再按 typmod 范围解码 interval 字段;第一次解析返回格式错误时还会尝试 ISO 8601。解码返回 DTERR_FIELD_OVERFLOW 时,interval_in 将其改为 DTERR_INTERVAL_OVERFLOW;随后 DateTimeParseErrorERRCODE_INTERVAL_FIELD_OVERFLOW 把原始输入放进 primary。这是 interval 字段输入边界。itmin2interval 转换失败、typmod 调整和 interval 算术有独立 guard,可能报告 2200822003 或其他条件,不会自动变成 22015

诊断

阅读完整 primary,确认输入字符串、interval 字段和声明的 typmod/范围。区分字段解码时溢出,还是后续构造、缩放或除 interval 时才失败。日期时间字段诊断属于相邻的日期时间错误码,interval 除以零因子属于 22012。不要用一般数值溢出修复替代字段范围问题。

处理

修正报文指出的 interval 字段或输入表示,使其落在操作接受的范围内;如果边界来自 interval typmod,也要复核该约束。如果失败发生在后续算术中,应按它自己的 SQLSTATE 修复。普通错误上下文中该路径抛出 ERROR,显式事务需先 ROLLBACKROLLBACK TO SAVEPOINT 再重试;调用方提供 ErrorSaveContext 时,错误会被保存,调用返回 NULL/失败而不是抛出。

报文

  • 普通上下文为 ERROR 的 primary:interval field value out of range: "%s",其中 %s 是原始 interval 输入。引用分支没有固定 DETAIL 或 HINT。

版本

锁定目录从 7.4 起记录该条件;固定源码覆盖 PostgreSQL 18.6。源码确认的路径是 interval 输入解码,不声称所有 interval 算术溢出都使用 22015

22007220032200822012

来源

运行核验为 not_run;本页不宣称 interval 运行观察。结构化证据记录保留确切报文角色和源码边界。