22P01 — floating_point_exception
22P01
速览
固定核心代码路径中的 FloatExceptionHandler 被注册为 SIGFPE 处理器。它以 ERROR 严重性发出主消息 floating-point exception,详细信息说明收到无效浮点操作信号,可能是结果越界或除零等无效操作。
| 字段 | 值 |
|---|---|
| SQLSTATE | 22P01 |
| 条件名 | floating_point_exception |
| 状态 | 有效 |
| 已知存在于 | 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_FLOATING_POINT_EXCEPTION |
| 别名 | — |
含义
src/backend/tcop/postgres.c 中的 FloatExceptionHandler(SIGNAL_ARGS) 把信号转成 ereport(ERROR);PostgresMain 为 SIGFPE 安装该处理器。这是浮点信号路径,不能据此说所有除法或数值越界都使用 22P01。精确数值除零和数值范围检查通常分别使用自己的 22012 和 22003 条件。
诊断
保留完整 ErrorResponse 和服务器日志上下文,包括语句位置以及可用的 routine/context 字段。检查操作数类型和表达式路径,区分硬件或浮点无效操作与使用 22012 或 22003 的精确数值运算。固定处理器的详细信息是诊断说明,不证明具体一定是除零。
报文
ERROR主消息:floating-point exception- DETAIL:
An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero.
处理
修正算术或输入范围;如果需要改变数值域,要在运算前明确转换。显式事务中,ERROR 会使事务进入中止状态,重试前执行 ROLLBACK 或 ROLLBACK TO SAVEPOINT;自动提交模式下先修正表达式或数据再重新提交。引用路径是 ERROR 而非 FATAL,普通客户端后端不会仅因该条件就需要重置连接。
版本
锁定目录从 PostgreSQL 7.4 记录此条件。本页引用的处理器和 SIGFPE 注册来自 PostgreSQL 18.6 REL_18_6;目录边界不能证明当前消息的精确引入版本。
相关
来源
src/backend/tcop/postgres.c#L3072-L3082
src/backend/tcop/postgres.c#L4245-L4249
结构化证据记录保存精确主消息/详细信息、严重性和源码/运行边界;本次没有诱发信号。