选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 错误代码 / Class 42 语法错误或访问规则冲突

42P07 duplicate_table

重复表或关系定义

ERROR 源码确认 详解 未实测

条件名
duplicate_table
宏名称
ERRCODE_DUPLICATE_TABLE
启用版本
7.4
状态
活跃

版本覆盖

速览

42P07duplicate_table)覆盖关系名称冲突、条件 DDL 的 NOTICE,以及继承父项重复或继承环,应先识别操作。

含义

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".

报文模板

源码里的格式串,不是某一次运行的输出。%s 之类是占位符,实际报文会填入对象名与取值。适用范围一栏是核验时留下的原始英文记录,未经翻译。

主消息 relation "%s" already exists

来源:src/backend/catalog/heap.c(lines 1194-1196) @ REL_18_6

适用范围:Placeholders remain dynamic source fields; no concrete runtime value is claimed.

主消息 relation "%s" already exists, skipping

来源:src/backend/catalog/index.c(lines 898-901) @ REL_18_6

适用范围:Placeholders remain dynamic source fields; no concrete runtime value is claimed.

主消息 relation "%s" would be inherited from more than once

来源:src/backend/commands/tablecmds.c(lines 875-878) @ REL_18_6

适用范围:Placeholders remain dynamic source fields; no concrete runtime value is claimed.

主消息 circular inheritance not allowed
DETAIL "%s" is already a child of "%s".
主消息 · errdetail "%s" is already a child of "%s".

来源:src/backend/commands/tablecmds.c(lines 17376-17381) @ REL_18_6

适用范围:Placeholders remain dynamic source fields; no concrete runtime value is claimed.

版本

目录范围从 7.4 到 18.6、19beta3,不是精确的功能引入判断。选定的 18.6 路径覆盖关系名称查找、索引 IF NOT EXISTS、继承父项重复和继承环;未运行数据库。

来源

证据

断言

每条断言都写明了是怎么核实的,以及它不覆盖什么。这一层是核验时留下的原始英文记录,照原样呈现,未经翻译。

同类错误代码

Class 42 语法错误或访问规则冲突 下的其他成员。