42P06 — 重复模式
42P06 — 重复模式
速览
42P06(duplicate_schema)是模式定义冲突。普通 CREATE 报 ERROR;IF NOT EXISTS 可发 NOTICE 并继续,但条件路径只是跳过创建,不会协调已有模式。
| 字段 | 值 |
|---|---|
| SQLSTATE | 42P06 |
| 条件名 | duplicate_schema |
| 状态 | 有效 |
| 已知存在于 | 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_SCHEMA |
| 别名 | — |
含义
NamespaceCreate 发现 pg_namespace 中已有同名行时报告 ERROR schema "%s" already exists。CREATE SCHEMA IF NOT EXISTS 检查同一命名空间后,在创建前报告 NOTICE schema "%s" already exists, skipping。两条报文都指向模式本身,不是其中的关系;固定命令路径先做创建权限检查,NOTICE 不表示已经比较了所有者或定义。
诊断
确认目标数据库和模式,检查 pg_namespace.nspname、所有者/ACL、内容和准确迁移语句。保留严重性:NOTICE 是条件行为并让命令继续,普通 CREATE 的 ERROR 会使显式事务失败。不能从 NOTICE 推出已有模式的所有者、授权、扩展、表或迁移版本符合要求。
处理
仅在所有权、权限和内容符合业务契约时复用。IF NOT EXISTS 不验证也不协调这些属性,需要时应追加明确的所有权、授权和迁移检查。不要删除模式来通过迁移。普通 CREATE 在显式事务中报 ERROR 后,应回滚到合适保存点或回滚事务再继续。
消息变体
选定变体是 schema "%s" already exists(明确 ERROR)和 schema "%s" already exists, skipping(明确 NOTICE)。%s 是动态模式名;两条报文都不保证已有模式的所有者或定义。
版本
目录范围从 7.4 到 18.6、19beta3,不是精确的功能引入判断。选定的是 18.6 固定 ERROR 和 NOTICE 源码路径,未运行数据库。
相关
来源
-
src.errcodes.42P06.18.6—src/backend/utils/errcodes.txtline 382,固定于724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-2566e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba(源码)。 -
src.call.42P06.4d5505b63e38ef1b25836623—src/backend/catalog/pg_namespace.clines 62-64,固定于724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-25689675ba1bb9c531ab4f43db8a6f7cac00956561b342e42ea6eaae6b8d0b50d78(源码)。 -
src.call.42P06.373538bec86ad8eedfce8d7a—src/backend/commands/schemacmds.clines 132-135,固定于724edf9bde9d356724ad384a2e196edc3c9f80f7;SHA-2565fd5f43dce5f36f06ed390014c06f244564072227d25a22735f594d2170626b1(源码)。 -
src.calls.REL_18_6.42P06— 固定本地核心调用扫描;SHA-2569ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf。 -
作者证据— 记录源码断言、消息角色和运行边界。