跳转到主要内容

42P07 — 重复表或关系定义

PostgreSQL SQLSTATE 42P07(duplicate_table)的来源与诊断参考。

42P07 — 重复表或关系定义

速览

42P07duplicate_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.6src/backend/utils/errcodes.txt line 383,固定于 724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-256 6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba源码)。

  • src.call.42P07.694fcfd426e95ce13263fb9asrc/backend/catalog/heap.c lines 1194-1196,固定于 724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-256 e720ee58279590793edd0985b3c910970ef56e7361b8ef92e245370587e02a0e源码)。

  • src.call.42P07.38d8697cf62c00c05657a6d4src/backend/catalog/index.c lines 898-901,固定于 724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-256 98a4156a5c21ae856a3b583b633cdeb578a5b69910386c9f166d69fcb04ba2d0源码)。

  • src.call.42P07.30cb2a5359e1ec4bea60a466src/backend/commands/tablecmds.c lines 875-878,固定于 724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-256 422dc8e833df4940755973c757e338295822ba3e4c7266c40669f49f96eb15a9源码)。

  • src.call.42P07.19ee2522385544dc7ceb62bbsrc/backend/commands/tablecmds.c lines 17376-17381,固定于 724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-256 422dc8e833df4940755973c757e338295822ba3e4c7266c40669f49f96eb15a9源码)。

  • src.calls.REL_18_6.42P07 — 固定本地核心调用扫描;SHA-256 9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf

  • 作者证据 — 记录源码断言、消息角色和运行边界。