# 22P01 — floating_point_exception

> PostgreSQL SQLSTATE 22P01 的来源与诊断参考。
---

# 22P01

## 速览 {#at-a-glance}
固定核心代码路径中的 `FloatExceptionHandler` 被注册为 `SIGFPE` 处理器。它以 `ERROR` 严重性发出主消息 `floating-point exception`，详细信息说明收到无效浮点操作信号，可能是结果越界或除零等无效操作。

<!-- BEGIN SQLSTATE FACTS: generated by scripts/generate.py; do not edit -->

| 字段 | 值 |
| --- | --- |
| 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` |
| 别名 | `—` |

<!-- source facts: data/errcodes/22P01.json -->
<!-- END SQLSTATE FACTS -->

## 含义 {#meaning}
`src/backend/tcop/postgres.c` 中的 `FloatExceptionHandler(SIGNAL_ARGS)` 把信号转成 `ereport(ERROR)`；`PostgresMain` 为 `SIGFPE` 安装该处理器。这是浮点信号路径，不能据此说所有除法或数值越界都使用 `22P01`。精确数值除零和数值范围检查通常分别使用自己的 `22012` 和 `22003` 条件。

## 诊断 {#diagnosis}
保留完整 ErrorResponse 和服务器日志上下文，包括语句位置以及可用的 routine/context 字段。检查操作数类型和表达式路径，区分硬件或浮点无效操作与使用 `22012` 或 `22003` 的精确数值运算。固定处理器的详细信息是诊断说明，不证明具体一定是除零。

## 报文 {#messages}
- `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.`

## 处理 {#response}
修正算术或输入范围；如果需要改变数值域，要在运算前明确转换。显式事务中，`ERROR` 会使事务进入中止状态，重试前执行 `ROLLBACK` 或 `ROLLBACK TO SAVEPOINT`；自动提交模式下先修正表达式或数据再重新提交。引用路径是 `ERROR` 而非 `FATAL`，普通客户端后端不会仅因该条件就需要重置连接。

## 版本 {#versions}
锁定目录从 PostgreSQL `7.4` 记录此条件。本页引用的处理器和 `SIGFPE` 注册来自 PostgreSQL 18.6 `REL_18_6`；目录边界不能证明当前消息的精确引入版本。

## 相关 {#related}
[`22012`](../22012/)、[`22003`](../22003/)、[`22023`](../22023/)

## 来源 {#sources}
[`src/backend/tcop/postgres.c#L3072-L3082`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/tcop/postgres.c#L3072)

[`src/backend/tcop/postgres.c#L4245-L4249`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/tcop/postgres.c#L4245)

结构化[证据记录](../../data/evidence/22p01.json)保存精确主消息/详细信息、严重性和源码/运行边界；本次没有诱发信号。
