文档 / SQL 状态码 / Class 40 事务回滚
40000 transaction_rollback
事务回滚
ERROR 源码确认 参考 未实测
- 条件名
transaction_rollback- 宏名称
ERRCODE_TRANSACTION_ROLLBACK- 启用版本
- 7.4
- 状态
- 活跃
版本覆盖
速览
40000 是事务回滚的总括条件。18.6 固定源码包含 transaction aborted during system catalog scan 的内部系统目录扫描路径;复现它需要安全 SQL 案例之外的内部故障或可见性条件。不要把序列化失败、死锁或任意客户端取消改称 40000。
含义
40000 是宽泛的事务回滚条件。genam.c 中解析到的核心路径是防御性内部错误:系统目录扫描期间事务已中止。它不是 40001 表示的常规客户端重试路径,也不是死锁报告。
报文模板
源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。
transaction aborted during system catalog scan
来源:src/backend/access/index/genam.c @ REL_18_6
适用范围:This is an internal catalog-scan path; ordinary client rollback has no basis to use this template.
诊断
若真实出现 40000,保存服务器日志、后端 PID、操作和源码诊断;固定主模板是 transaction aborted during system catalog scan。检查日志是否指向内部目录/索引可见性问题或服务器故障。客户端 ROLLBACK、序列化失败或语句取消都不能证明该码,选定扫描也没有安全的纯 SQL 复现。
处理
按服务器要求结束失败事务,并在重试前调查目录/索引和服务器健康状态。只有会话不可用时才重连,重做写入前先核对持久化结果。不要把 40001、40P01 或普通回滚改称 40000;本页只记录内部源码边界。
可复现案例
在一次性实例上执行过的场景。
transaction_rollback_boundary PG 10 / 18
前置条件
- A runner-owned disposable target is provisioned.
触发
No internal system-catalog-scan fault is injected; the fixed source path remains a source-only boundary.
处置
Treat this umbrella as a transaction rollback outcome only after identifying the concrete source mechanism; do not retry an unknown internal failure blindly.
清理
Drop the case schema with an owner connection.
版本
上面的锁定事实表记录项目快照范围内的目录存在情况。固定源码证据只覆盖下面声明的路径;不能仅从定义推导精确行为引入版本或更广的运行覆盖。
来源
- 上游源码 src/backend/utils/errcodes.txt
- 上游源码 src/backend/access/index/genam.c 第 496–498 行
- 核验材料 raw/calls/REL_18_6.jsonl
证据
断言
每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。
-
40000 is the transaction_rollback condition in Class 40.
-
transaction aborted during system catalog scan is a source-confirmed path for 40000.
同类 SQL 状态码
| 状态码 | 条件名 | 宏名称 | 严重等级 | 版本 |
|---|---|---|---|---|
| 40000 | transaction_rollback | ERRCODE_TRANSACTION_ROLLBACK |
ERROR | 7.4 |
| 事务回滚的类别码,具体原因见 40001 等子码。 | 活跃 | |||
| 40001 | serialization_failure | ERRCODE_T_R_SERIALIZATION_FAILURE |
ERROR | 7.4 |
| 并发事务无法串行化,需回滚后重试。 | 活跃 | |||
| 40002 | transaction_integrity_constraint_violation | ERRCODE_T_R_INTEGRITY_CONSTRAINT_VIOLATION |
ERROR | 7.4 |
| 事务级完整性约束违规的总括码,核心不直接使用。 | 活跃 | |||
| 40003 | statement_completion_unknown | ERRCODE_T_R_STATEMENT_COMPLETION_UNKNOWN |
ERROR | 7.4 |
| 语句完成状态不确定,重试前先核对业务状态。 | 活跃 | |||
| 40P01 | deadlock_detected | ERRCODE_T_R_DEADLOCK_DETECTED |
ERROR | 7.4 |
| 检测到死锁,事务因等待环被选为受害者中止。 | 活跃 | |||