选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 错误代码 / Class 22 数据异常

22015 interval_field_overflow

ERROR 源码确认 参考 未实测

类别
Class 22 数据异常
严重等级
ERROR
条件名
interval_field_overflow
宏名称
ERRCODE_INTERVAL_FIELD_OVERFLOW
启用版本
7.4
状态
活跃

版本覆盖

速览

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

含义

固定的 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。

报文模板

源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。

主消息 interval field value out of range: "%s"

来源:src/backend/utils/adt/datetime.c @ REL_18_6

版本

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

来源

证据

断言

每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。

  • 22015 is interval_field_overflow in SQLSTATE Class 22.

    核实方式Read the fixed errcodes row and macro.

    来源src/backend/utils/errcodes.txt

  • interval_in maps a datetime field-overflow decode result to DTERR_INTERVAL_OVERFLOW before DateTimeParseError reports the interval-field primary; later itmin2interval range failure is a separate 22008 branch.

    核实方式Read interval_in, the remap, and the DateTimeParseError switch.

    不覆盖This is the interval input decoding path, not every interval arithmetic overflow.

    来源src/backend/utils/adt/timestamp.c · src/backend/utils/adt/datetime.c

  • DateTimeParseError fills ErrorSaveContext through errsave instead of throwing when a soft error context is supplied; ordinary callers receive ERROR.

    核实方式Read the ErrorSaveContext comment and errsave branch.

    来源src/backend/utils/adt/datetime.c

  • The locked catalogue records 22015 from 7.4 without proving an exact implementation introduction date.

    核实方式Use catalogue presence and history boundaries.

    来源src/backend/utils/errcodes.txt

同类错误代码

Class 22 数据异常 下的其他成员。