跳转到主要内容

42602 — 名称无效(invalid_name)

PostgreSQL SQLSTATE 42602(名称无效,invalid_name)的源码证据、诊断与处理参考。

42602 — 名称无效

速览

SQLSTATE 42602 是 Class 42 中的 invalid_name42602 表示名称无效。选定的 enum 路径拒绝 64 字节标签,主报文为 invalid enum label "%s",并给出长度 DETAIL;随后可以添加短标签。

字段
SQLSTATE 42602
条件名 invalid_name
状态 有效
已知存在于 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_INVALID_NAME
别名

含义

42602 表示名称无效。在 AddEnumLabel 中,PostgreSQL 会在修改目录前把输入的 enum 标签与 NAMEDATALEN - 1 比较。选定的 64 字节标签因此产生明确的 ERROR,主报文为 invalid enum label "%s",并给出长度 DETAIL;随后可以添加短标签。这是 enum 标签的具体路径,不能据此断言所有无效对象名称都由同一 producer 产生。

诊断

检查对象类型以及 DETAIL 中的准确长度措辞。本批在 18.6 与 10.21 观察 enum 标签路径:18.6 的源码/运行报文是 Labels must be 63 bytes or less.,10.21 是 Labels must be 63 characters or less. 仅凭这两个措辞不能推断长度机制改变;两份固定源码都把标签与 NAMEDATALEN - 1 比较。失败的 DDL 在自动提交中是 ERROR,选定会话仍为 IDLE

处理

使用限制以内的标签,或把较长的用户值存为数据。失败语句返回后再添加合法短标签;选定修复后 enum 中有 okshort。不要静默截断 enum 标签,也不要把该 enum 专用路径推广成所有名称错误。

报文

选定源码路径以明确的 ERROR 发出主报文 invalid enum label "%s"。DETAIL 在 18.6 为 Labels must be 63 bytes or less.,在 10.21 为 Labels must be 63 characters or less.,标签文本是动态值。只有客户端异常而没有服务器 SQLSTATE、主报文和长度 DETAIL 时,不能据此识别这个选定的 enum 标签子路径;其他固定 producer 可以使用同一 SQLSTATE 和不同诊断。

代表案例

本页使用与运行器注册表相同的语句。执行时,syntax_schemasyntax_role 等生成名称会替换为一次性实例中的实际值。

CREATE TYPE syntax_schema.syntax_enum AS ENUM ('ok');
ALTER TYPE syntax_schema.syntax_enum ADD VALUE 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
ALTER TYPE syntax_schema.syntax_enum ADD VALUE 'short';
SELECT enum_range(NULL::syntax_schema.syntax_enum)::text[];

选定的 18.6 运行记录结构化诊断并通过修复断言;10.21 运行通过同一案例的具体检查。可下载的案例和证据投影分别是 42602 案例 JSON作者证据。运行器清单为 verify/cases/42602/cases.json,页面 SQL 会与共享注册表核对。

版本

选定的自然运行范围是 PostgreSQL 18.6 与 10.21,不能据此推断所有中间版本的行为。

来源

  • src.errcodes.18.6 — fixed errcodes.txt definition at commit 724edf9bde9d356724ad384a2e196edc3c9f80f7; SHA-256 6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba (source).
  • src.enum-invalid-label.18.6src/backend/catalog/pg_enum.c at REL_18_6 commit 724edf9bde9d356724ad384a2e196edc3c9f80f7; fixed blob SHA-256 849793e92baf9c0e4e8950f8472e2772289c22c58a4ea93997ef0218d7e4b3fc (source).
  • src.enum-invalid-label.10.23src/backend/catalog/pg_enum.c at REL_10_23 commit 02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4; fixed blob SHA-256 08076bbd661f4c400cf9741f4cfe89c5b0daf3383e4a3e6ac10f3f8f4bec16a6 (source).
  • src.calls.REL_18_6 / src.calls.REL_10_23 — fixed call scans, SHA-256 9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf / 00d16d3eb01b71ccf1b245c8f3102f9d0ec9f36fb02777b8dd1b99fcb263040c.