22005 — error_in_assignment
PostgreSQL SQLSTATE 22005 的源码与诊断参考。
22005
速览
22005 是 error_in_assignment,表示赋值操作违反了目标变量的赋值契约。固定 PL/pgSQL 路径报告常量变量被赋值:variable "%s" is declared CONSTANT。
| 字段 | 值 |
|---|---|
| SQLSTATE | 22005 |
| 条件名 | error_in_assignment |
| 状态 | 有效 |
| 已知存在于 | 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_ERROR_IN_ASSIGNMENT |
| 别名 | — |
含义
固定 PL/pgSQL 路径报告常量变量被赋值:variable "%s" is declared CONSTANT。
exec_check_assignable 会对 PL/pgSQL 变量、promise 变量和 isconst 为真的 record 执行该检查;record field 会递归检查父 record,而 row datum 本身可赋值。因此诊断时要结合 routine 上下文和报文中的 datum 名称。
报文
已确认分支以 ERROR 严重性报告 primary:variable "%s" is declared CONSTANT。固定源码没有 DETAIL 或 HINT。本页只有源码证据,没有自然运行观察。
诊断
读取 message 中的变量名和 routine 上下文;固定路径是 PL/pgSQL 常量赋值错误,不是一般类型转换错误。
处置
移除该赋值、在确需可变时调整声明,或写入另一个变量;先修正 routine 再重做业务操作。显式事务中,未捕获的 ERROR 会使事务失败,应回滚整个事务或回滚到调用前建立的保存点。若 routine 有意使用 PL/pgSQL EXCEPTION 块处理错误,则可由其子事务隔离;本页没有运行案例证明特定 handler 的行为。
版本
锁定目录从 7.4 记录该条件,并在列出的正式快照及 19beta3 中出现;固定源码覆盖为 PostgreSQL 18.6。
相关条件
来源
详见结构化的证据记录,其中列出固定源码链接与范围限制。