42P07 — 重复表或关系定义
42P07 — 重复表或关系定义
速览
42P07(duplicate_table)覆盖关系名称冲突、条件 DDL 的 NOTICE,以及继承父项重复或继承环,应先识别操作。
| 字段 | 值 |
|---|---|
| SQLSTATE | 42P07 |
| 条件名 | duplicate_table |
| 状态 | 有效 |
| 已知存在于 | 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_DUPLICATE_TABLE |
| 别名 | — |
含义
18.6 核心路径中,表、序列、索引和 CREATE TABLE AS 冲突均报告 relation "%s" already exists。这些对象共享 pg_class 关系命名空间,因此另一种关系类型的同名对象也会造成冲突。索引的 IF NOT EXISTS 路径报告 NOTICE relation "%s" already exists, skipping 并直接返回,不检查已有索引定义是否符合请求。继承路径还对重复父项和 circular inheritance not allowed 使用此 SQLSTATE,后者 DETAIL 为 "%s" is already a child of "%s".。
诊断
名称冲突查 pg_class/pg_namespace,并把序列、索引、表、视图和物化视图纳入检查。IF NOT EXISTS 的 NOTICE 还要核对已有对象的所有者、持久性、列、索引和选项,不能把源码中的名称检查当成定义比较。继承报文查 pg_inherits 和完整父列表,区分父项重复与继承环。
处理
只有确认已有定义可接受时才使用幂等 DDL;关系名称冲突可选择采用已有对象或制定对象级迁移。重复父项应从父列表移除重复项,继承环则要打破父图并复核 pg_inherits;单纯改名不能修复父图。显式事务中的 ERROR 应先回滚保存点或回滚事务再查目录;NOTICE 路径无需该恢复。
消息变体
代表变体如下:
| 路径 | 严重性 | 主消息 | DETAIL |
|---|---|---|---|
| 关系名称冲突 | ERROR |
relation "%s" already exists |
无 |
索引 IF NOT EXISTS 冲突 |
NOTICE |
relation "%s" already exists, skipping |
无 |
| 继承父项重复 | ERROR |
relation "%s" would be inherited from more than once |
无 |
| 继承成环 | ERROR |
circular inheritance not allowed |
"%s" is already a child of "%s". |
版本
目录范围从 7.4 到 18.6、19beta3,不是精确的功能引入判断。选定的 18.6 路径覆盖关系名称查找、索引 IF NOT EXISTS、继承父项重复和继承环;未运行数据库。
相关
来源
-
src.errcodes.42P07.18.6—src/backend/utils/errcodes.txtline 383,固定于724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-2566e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba(源码)。 -
src.call.42P07.694fcfd426e95ce13263fb9a—src/backend/catalog/heap.clines 1194-1196,固定于724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-256e720ee58279590793edd0985b3c910970ef56e7361b8ef92e245370587e02a0e(源码)。 -
src.call.42P07.38d8697cf62c00c05657a6d4—src/backend/catalog/index.clines 898-901,固定于724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-25698a4156a5c21ae856a3b583b633cdeb578a5b69910386c9f166d69fcb04ba2d0(源码)。 -
src.call.42P07.30cb2a5359e1ec4bea60a466—src/backend/commands/tablecmds.clines 875-878,固定于724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-256422dc8e833df4940755973c757e338295822ba3e4c7266c40669f49f96eb15a9(源码)。 -
src.call.42P07.19ee2522385544dc7ceb62bb—src/backend/commands/tablecmds.clines 17376-17381,固定于724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-256422dc8e833df4940755973c757e338295822ba3e4c7266c40669f49f96eb15a9(源码)。 -
src.calls.REL_18_6.42P07— 固定本地核心调用扫描;SHA-2569ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf。 -
作者证据— 记录源码断言、消息角色和运行边界。