# 40003 — statement_completion_unknown（语句完成状态未知）

> PostgreSQL SQLSTATE 40003 的来源与机制边界参考。
---

# 40003 — statement_completion_unknown（语句完成状态未知）

## 速览 {#at-a-glance}

`40003` 描述语句完成状态不确定，通常是连接或协议边界上的结果核对问题。本批固定核心扫描没有提供安全的 SQL-only 自然触发方式。客户端超时或伪造 RAISE 都不能证明服务器完成状态不确定；重试前先核对持久化业务状态。

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

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `40003` |
| 条件名 | `statement_completion_unknown` |
| 状态 | `有效` |
| 已知存在于 | `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_T_R_STATEMENT_COMPLETION_UNKNOWN` |
| 别名 | `—` |

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

## 含义 {#meaning}

`40003` 表示语句完成状态未知：连接或传输失败后，客户端无法判断服务器是否已经完成语句。它是结果可知性的边界，不能证明语句失败，也不能指示盲目回滚。

## 诊断 {#diagnosis}

用请求标识或幂等键关联服务器日志、后端活动、提交记录和持久化业务状态。套接字异常通常没有服务器 SQLSTATE，固定扫描也没有安全的核心纯 SQL `40003` 触发器。客户端超时、断链，以及在新会话上执行 `ROLLBACK` 都是独立事实，不能证明原语句已撤销。

## 处理 {#response}

重试前先核对：在新的健康会话上查询权威持久化状态；只有同时匹配原请求和业务结果后，幂等键才能表示“已处理”；再由应用判断是否可重复执行。不要声称通用重试或回滚能解决未知完成状态，也不要用 `RAISE` 或本地超时伪造 `40003`。

## 版本 {#versions}

上面的锁定事实表记录项目快照范围内的目录存在情况。固定源码证据只覆盖下面声明的路径；不能仅从定义推导精确行为引入版本或更广的运行覆盖。

## 相关 {#related}

可对照服务器明确确认可重试的[40001 序列化失败](../40001/)；40003 必须先核对结果。

## 来源 {#sources}

- [`src.errcodes.18.6`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt)（SHA-256 `6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba`）
- 固定调用扫描 `src.calls.REL_18_6`（SHA-256 `9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf`）
