文档 / SQL 状态码 / Class 42 语法错误或访问规则冲突
42703 undefined_column
未定义列
ERROR 已实测 详解 实测通过
- 条件名
undefined_column- 宏名称
ERRCODE_UNDEFINED_COLUMN- 启用版本
- 7.4
- 状态
- 活跃
版本覆盖
速览
SQLSTATE 42703 是 Class 42 中的 undefined_column。42703 表示未定义列。选定查询在真实表上引用 missing_column,报告 column "%s" does not exist;改为已定义的 id 后成功。
含义
42703 表示未定义列。当关系已经解析出来、但引用的列不在可见查询范围内时,errorMissingColumn 会在 range table 中寻找有用建议并发出 ERROR:column "%s" does not exist(如果指定了关系,也可能使用限定形式)。选定查询在真实表上引用 missing_column,改为已定义的 id 后成功。
诊断
检查准确关系、别名、解析范围、带引号的拼写/大小写和迁移版本。如果解析器找到接近候选列,可能追加 HINT;选定路径没有 HINT。解析器在执行前报告错误,自动提交会话仍为 IDLE;显式 BEGIN 中会让事务进入 INERROR,必须 ROLLBACK 或回滚到合适保存点后再重试。要把缺列与 42P01(未限定关系不存在)、3F000(schema/创建 namespace 不存在)以及 42702(多个可见列匹配)区分开。
处理
修正列名或迁移后针对预期关系重新执行。如果应用支持多个 schema 或版本,应限定关系并先部署匹配的迁移。带引号且大小写不同的标识符是不同名称;修改应用 SQL 前应通过目录或 introspection 确认已部署的拼写。
可复现案例
在一次性实例上执行过的场景。其中 1 个附有可执行 SQL,正文相应小节里给出。
undefined_column PG 10 / 18 有 SQL
前置条件
- A runner-owned disposable target is provisioned.
触发
Select a column name that is absent from a real table.
断言
- SQLSTATE is 42703 with the undefined-column diagnostic
- The session remains IDLE
- Selecting the defined id column succeeds
处置
Correct the column name or migration, then rerun the query against the intended relation.
清理
Drop the case schema with an owner connection.
报文
选定的 errorMissingColumn 分支以明确的 ERROR 发出主报文 column "%s" does not exist;%s 是未解析列名,其他源码分支可能追加建议 HINT 或使用带关系限定的形式。只有客户端异常而没有服务器 SQLSTATE 和主报文时,不能据此认定 42703。
报文模板
源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。
column "%s" does not exist
来源:src/backend/parser/parse_relation.c @ REL_18_6 · src/backend/parser/parse_relation.c @ REL_10_23
代表案例
本页使用与运行器注册表相同的语句。执行时,syntax_schema、syntax_role 等生成名称会替换为一次性实例中的实际值。
CREATE TABLE syntax_schema.column_table (id integer);
INSERT INTO syntax_schema.column_table VALUES (1);
SELECT missing_column FROM syntax_schema.column_table;
SELECT id FROM syntax_schema.column_table;
选定的 18.6 运行记录结构化诊断并通过修复断言;10.21 运行通过同一案例的具体检查。可下载的案例和证据投影分别是 42703 案例 JSON 和 作者证据。运行器清单为 verify/cases/42703/cases.json,页面 SQL 会与共享注册表核对。
版本
选定的自然运行范围是 PostgreSQL 18.6 与 10.21,不能据此推断所有中间版本的行为。
来源
- 上游源码 src/backend/utils/errcodes.txt
- 上游源码 src/backend/parser/parse_relation.c 第 3327–3331 行
- 上游源码 src/backend/parser/parse_relation.c 第 3854–3859 行
- 核验材料 verify/cases/42703/cases.json
- 核验材料 verify/cases/42703/snippets.json
- 核验材料 raw/calls/REL_10_23.jsonl
- 核验材料 raw/calls/REL_18_6.jsonl
证据
断言
每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。
-
42703 is the undefined_column condition in Class 42.
-
The fixed source calls for 42703 include the mechanism and message boundary selected for this page.
-
The selected undefined_column case passed on isolated PostgreSQL 18.6 and 10.21 targets.
-
The locked catalogue records 42703; runtime scope is limited to the selected targets.
运行记录
| 目标 | 服务器版本 | 结果 | 覆盖案例 |
|---|---|---|---|
| latest | 18.6 (Homebrew) | passed | |
| pg10 | 10.21 (Debian 10.21-1.pgdg90+1) | passed |
同类 SQL 状态码
| 状态码 | 条件名 | 宏名称 | 严重等级 | 版本 |
|---|---|---|---|---|
| 42000 | syntax_error_or_access_rule_violation | ERRCODE_SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION |
ERROR | 7.4 |
| 语法错误或访问规则违反的总类,见具体子码。 | 活跃 | |||
| 42501 | insufficient_privilege | ERRCODE_INSUFFICIENT_PRIVILEGE |
ERROR | 7.4 |
| 当前角色对目标对象的权限不足。 | 活跃 | |||
| 42601 | syntax_error | ERRCODE_SYNTAX_ERROR |
ERROR | 7.4 |
| SQL 语句存在语法错误,解析器拒绝执行。 | 活跃 | |||
| 42602 | invalid_name | ERRCODE_INVALID_NAME |
ERROR | 7.4 |
| 名称不合法,如 enum 标签超出长度限制。 | 活跃 | |||
| 42611 | invalid_column_definition | ERRCODE_INVALID_COLUMN_DEFINITION |
ERROR | 7.4 |
| 列定义无效,如继承的父表默认值冲突。 | 活跃 | |||
| 42622 | name_too_long | ERRCODE_NAME_TOO_LONG |
ERROR | 7.4 |
| 标识符或 name 值超出长度上限。 | 活跃 | |||
| 42701 | duplicate_column | ERRCODE_DUPLICATE_COLUMN |
ERROR | 7.4 |
| 同一定义中重复指定了同名列。 | 活跃 | |||
| 42702 | ambiguous_column | ERRCODE_AMBIGUOUS_COLUMN |
ERROR | 7.4 |
| 列引用有歧义,多个表都有该列名。 | 活跃 | |||
| 42703 | undefined_column | ERRCODE_UNDEFINED_COLUMN |
ERROR | 7.4 |
| 引用的列在目标关系中不存在。 | 活跃 | |||
| 42704 | undefined_object | ERRCODE_UNDEFINED_OBJECT |
ERROR | 7.4 |
| 引用的数据库对象不存在,如触发器或类型。 | 活跃 | |||
| 42710 | duplicate_object | ERRCODE_DUPLICATE_OBJECT |
ERROR | 7.4 |
| 要定义的对象名已被占用,如重复 CREATE TYPE。 | 活跃 | |||
| 42712 | duplicate_alias | ERRCODE_DUPLICATE_ALIAS |
ERROR | 7.4 |
| 同一查询命名空间中重复使用了表别名。 | 活跃 | |||
| 42723 | duplicate_function | ERRCODE_DUPLICATE_FUNCTION |
ERROR | 7.4 |
| 同一模式下已存在同名同参数类型的函数。 | 活跃 | |||
| 42725 | ambiguous_function | ERRCODE_AMBIGUOUS_FUNCTION |
ERROR | 7.4 |
| 函数调用有多个候选,无法选出最佳匹配。 | 活跃 | |||
| 42803 | grouping_error | ERRCODE_GROUPING_ERROR |
ERROR | 7.4 |
| 分组查询输出了既未分组也未聚合的列。 | 活跃 | |||
| 42804 | datatype_mismatch | ERRCODE_DATATYPE_MISMATCH |
ERROR | 7.4 |
| 表达式类型与目标上下文要求的类型不符。 | 活跃 | |||
| 42809 | wrong_object_type | ERRCODE_WRONG_OBJECT_TYPE |
ERROR | 7.4 |
| 命令本身有效,但不能作用于该类对象。 | 活跃 | |||
| 42830 | invalid_foreign_key | ERRCODE_INVALID_FOREIGN_KEY |
ERROR | 7.4 |
| 外键在被引用列上找不到合格的唯一键。 | 活跃 | |||
| 42846 | cannot_coerce | ERRCODE_CANNOT_COERCE |
ERROR | 7.4 |
| 源类型到目标类型之间没有可用的 cast。 | 活跃 | |||
| 42883 | undefined_function | ERRCODE_UNDEFINED_FUNCTION |
ERROR | 7.4 |
| 按名称和参数类型找不到匹配的函数或操作符。 | 活跃 | |||
| 428C9 | generated_always | ERRCODE_GENERATED_ALWAYS |
ERROR | 10 |
| 向身份列或生成列赋值,这类列只接受 DEFAULT。 | 活跃 | |||
| 42939 | reserved_name | ERRCODE_RESERVED_NAME |
ERROR | 7.4 |
| 对象名使用了保留名称,如模式或表空间。 | 活跃 | |||
| 42P01 | undefined_table | ERRCODE_UNDEFINED_TABLE |
ERROR | 7.4 |
| 引用的表、视图或其他关系不存在。 | 活跃 | |||
| 42P02 | undefined_parameter | ERRCODE_UNDEFINED_PARAMETER |
ERROR | 7.4 |
| 查询引用了解析器未知的位置参数,如 $1。 | 活跃 | |||
| 42P03 | duplicate_cursor | ERRCODE_DUPLICATE_CURSOR |
ERROR | 7.4 |
| 游标或 portal 名称与已有的冲突。 | 活跃 | |||
| 42P04 | duplicate_database | ERRCODE_DUPLICATE_DATABASE |
ERROR | 7.4 |
| 集群中已存在同名数据库。 | 活跃 | |||
| 42P05 | duplicate_prepared_statement | ERRCODE_DUPLICATE_PSTATEMENT |
ERROR | 7.4 |
| 当前会话已有同名的服务端预备语句。 | 活跃 | |||
| 42P06 | duplicate_schema | ERRCODE_DUPLICATE_SCHEMA |
ERROR | 7.4 |
| 要创建的模式名在当前数据库中已存在。 | 活跃 | |||
| 42P07 | duplicate_table | ERRCODE_DUPLICATE_TABLE |
ERROR | 7.4 |
| 关系名已存在,或继承父项重复。 | 活跃 | |||
| 42P08 | ambiguous_parameter | ERRCODE_AMBIGUOUS_PARAMETER |
ERROR | 7.4 |
| 参数存在但无法推导出一致而具体的类型。 | 活跃 | |||
| 42P09 | ambiguous_alias | ERRCODE_AMBIGUOUS_ALIAS |
ERROR | 7.4 |
| 一个表引用对应多个关系命名空间项。 | 活跃 | |||
| 42P10 | invalid_column_reference | ERRCODE_INVALID_COLUMN_REFERENCE |
ERROR | 7.4 |
| 列引用不符合该操作的契约,如 COPY 生成列。 | 活跃 | |||
| 42P11 | invalid_cursor_definition | ERRCODE_INVALID_CURSOR_DEFINITION |
ERROR | 7.4 |
| 游标声明违反定义阶段规则,如 SCROLL 选项冲突。 | 活跃 | |||
| 42P12 | invalid_database_definition | ERRCODE_INVALID_DATABASE_DEFINITION |
ERROR | 7.4 |
| 数据库定义无效,核心源码中未见触发路径。 | 活跃 | |||
| 42P13 | invalid_function_definition | ERRCODE_INVALID_FUNCTION_DEFINITION |
ERROR | 7.4 |
| 函数、聚合或触发器声明在校验阶段失败。 | 活跃 | |||
| 42P14 | invalid_prepared_statement_definition | ERRCODE_INVALID_PSTATEMENT_DEFINITION |
ERROR | 7.4 |
| PREPARE 定义预备语句时失败。 | 活跃 | |||
| 42P15 | invalid_schema_definition | ERRCODE_INVALID_SCHEMA_DEFINITION |
ERROR | 7.4 |
| CREATE SCHEMA 的模式声明不一致被拒绝。 | 活跃 | |||
| 42P16 | invalid_table_definition | ERRCODE_INVALID_TABLE_DEFINITION |
ERROR | 7.4 |
| 表定义无效,如分区键或主键规则冲突。 | 活跃 | |||
| 42P17 | invalid_object_definition | ERRCODE_INVALID_OBJECT_DEFINITION |
ERROR | 7.4 |
| 对象定义无效,如继承、生成列或规则冲突。 | 活跃 | |||
| 42P18 | indeterminate_datatype | ERRCODE_INDETERMINATE_DATATYPE |
ERROR | 7.4 |
| 无法推断表达式或参数的数据类型。 | 活跃 | |||
| 42P19 | invalid_recursion | ERRCODE_INVALID_RECURSION |
ERROR | 8.4 |
| 递归查询结构不合法,执行前被检查拒绝。 | 活跃 | |||
| 42P20 | windowing_error | ERRCODE_WINDOWING_ERROR |
ERROR | 8.4 |
| 窗口函数调用或框架边界定义不合法。 | 活跃 | |||
| 42P21 | collation_mismatch | ERRCODE_COLLATION_MISMATCH |
ERROR | 9.1 |
| 参与运算的排序规则不兼容,产生冲突。 | 活跃 | |||
| 42P22 | indeterminate_collation | ERRCODE_INDETERMINATE_COLLATION |
ERROR | 9.1 |
| 操作需要唯一排序规则,但无法确定。 | 活跃 | |||