# 40002 — transaction_integrity_constraint_violation（事务完整性约束违规）

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

# 40002 — transaction_integrity_constraint_violation（事务完整性约束违规）

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

`40002` 是目录定义的事务完整性条件。本批固定扫描没有解析出独立的 PostgreSQL 核心 `40002` 抛出点，因此不把外键、唯一性或其他具体约束错误重新标成这个总括码。应保存操作实际发出的 SQLSTATE。

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

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

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

## 含义 {#meaning}

`40002` 表示 40 类的事务完整性约束违规，但固定的 PostgreSQL 核心扫描没有解析出独立的 `40002` 调用点。PostgreSQL 的具体完整性机制通常报告 23 类具体码，例如 `23502`、`23503`、`23505`、`23514` 或 `23P01`。

## 诊断 {#diagnosis}

从错误中读取实际 SQLSTATE、约束名、关系、列和 DETAIL。服务器给出具体 23 类码时，应按该约束及事务状态诊断；不能因为操作发生在事务中就升级为 `40002`。本页没有选定的自然运行案例，也没有服务器特定报文模板。

## 处理 {#response}

修复具体约束违规和事务边界，再核对预期持久化状态。不要添加通用重试，也不要把已知 `235xx`/`23P01` 结果改称 `40002`；只有真实组件提供该码及其证据时才使用这一类定义。

## 版本 {#versions}

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

## 相关 {#related}

服务器给出具体完整性码时，应使用它，例如[23503 外键违规](../23503/)或[23505 唯一性违规](../23505/)。

## 来源 {#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`）
