# 42611 — 列定义无效（invalid_column_definition）

> PostgreSQL SQLSTATE 42611（列定义无效，invalid_column_definition）的源码证据、诊断与处理参考。
---

# 42611 — 列定义无效

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

SQLSTATE `42611` 是 Class `42` 中的 **invalid_column_definition**。`42611` 表示列定义无效。选定案例中的两个继承父表为 `id` 定义了不同默认值；子表 DDL 失败并报告 `column "%s" inherits conflicting default values`，提示显式指定默认值。

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

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

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

## 含义 {#meaning}

`42611` 表示列定义无效。在 `MergeAttributes` 中，PostgreSQL 按父表顺序合并同名列。如果继承来的默认表达式不相等，且子表没有覆盖它，最终检查会发出 `ERROR`：`column "%s" inherits conflicting default values`，并提示显式指定默认值。选定案例的两个父表为 `id` 定义了不同默认值。

## 诊断 {#diagnosis}

检查 `INHERITS` 列表中的每个父表，比较同名列的类型、排序规则、可空性和默认表达式。相同默认值可以合并；子表本地默认值可以覆盖继承冲突。选定 DDL 的 `ERROR` 后自动提交会话仍为 `IDLE`；这是继承默认值分支，不是一般的重复列错误，也不是类型/排序规则冲突。

## 处理 {#response}

按服务器提示在子表定义中显式声明预期默认值，然后插入 `DEFAULT VALUES` 并核对结果。如果父表本应一致，应直接修复父表迁移；如果差异是有意的，就把子表覆盖值明确写在 DDL 中。选定修复返回 `1`，但这是案例值，不代表所有场景都应选择同一策略。

## 报文 {#messages}

选定源码分支以明确的 `ERROR` 发出主报文 `column "%s" inherits conflicting default values` 和 HINT `To resolve the conflict, specify a default explicitly.` `%s` 是冲突列名。只有客户端异常而没有服务器 SQLSTATE、主报文和 HINT 时，不能据此识别这个选定的继承默认值子路径；其他固定 producer 可以使用同一 SQLSTATE 和不同诊断。

## 代表案例 {#case}

<!-- BEGIN SQLSTATE SNIPPET: conflicting_inherited_default -->

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

```sql
CREATE TABLE syntax_schema.parent_one (id integer DEFAULT 1);
CREATE TABLE syntax_schema.parent_two (id integer DEFAULT 2);
CREATE TABLE syntax_schema.child_bad () INHERITS (syntax_schema.parent_one, syntax_schema.parent_two);
CREATE TABLE syntax_schema.child_good (id integer DEFAULT 1) INHERITS (syntax_schema.parent_one, syntax_schema.parent_two);
INSERT INTO syntax_schema.child_good DEFAULT VALUES RETURNING id;
```

<!-- END SQLSTATE SNIPPET -->

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

## 版本 {#versions}

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

## 相关 {#related}

- [`42701` — 重复列](../42701/)

## 来源 {#sources}

- `src.errcodes.18.6` — fixed `errcodes.txt` definition at commit `724edf9bde9d356724ad384a2e196edc3c9f80f7`; SHA-256 `6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba` ([source](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt)).
- `src.inherited-conflicting-default.18.6` — `src/backend/commands/tablecmds.c` at `REL_18_6` commit `724edf9bde9d356724ad384a2e196edc3c9f80f7`; fixed blob SHA-256 `422dc8e833df4940755973c757e338295822ba3e4c7266c40669f49f96eb15a9` ([source](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/commands/tablecmds.c#L3144-L3148)).
- `src.inherited-conflicting-default.10.23` — `src/backend/commands/tablecmds.c` at `REL_10_23` commit `02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4`; fixed blob SHA-256 `6de441c88496c6cf57a836898388085ec08bf69afd70d07acdafd6089b9b5f8c` ([source](https://github.com/postgres/postgres/blob/02991e79f8f58bc208f05dcc8af0c62dbe0a6ea4/src/backend/commands/tablecmds.c#L2288-L2292)).
- `src.calls.REL_18_6` / `src.calls.REL_10_23` — fixed call scans, SHA-256 `9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf` / `00d16d3eb01b71ccf1b245c8f3102f9d0ec9f36fb02777b8dd1b99fcb263040c`.
