42P15 — 无效模式定义
PostgreSQL SQLSTATE 42P15:来源与诊断参考。
42P15 — 无效模式定义
速览
42P15(invalid_schema_definition)CREATE SCHEMA 的模式声明不一致时会被拒绝。
| 字段 | 值 |
|---|---|
| SQLSTATE | 42P15 |
| 条件名 | invalid_schema_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_SCHEMA_DEFINITION |
| 别名 | — |
含义
模式定义校验发生在转换 CREATE SCHEMA 所包含的对象时。setSchemaName helper 会拒绝某个所含对象显式指定的模式名,只要它不同于当前 CREATE SCHEMA 正在创建的模式。这是所含对象的声明不一致,不是两个顶层模式,也不是找不到模式。
诊断
从消息和完整 CREATE SCHEMA 语句中读取两个模式标识符,找出哪个所含的 CREATE TABLE、序列、视图或其他对象提供了冲突的限定名。分别检查生成的 DDL 与 search_path;改变 search_path 不能让语句中明确给出的两个名称一致。
处理
让 CREATE SCHEMA 只使用一个预期名称,让其中对象的显式限定名也使用该名称,或省略由该命令提供上下文的限定名。修正迁移生成器或引用方式。CREATE SCHEMA 失败本身不能证明已经提交了部分模式;只有需要清理或外层事务已有状态时才检查目录。如果 ERROR 发生在显式事务中,重试前先 ROLLBACK 或回滚到错误前的保存点。
消息
固定源码中的代表性消息包括:message: CREATE specifies a schema (%s) different from the one being created (%s)。占位符由实际对象、列或参数填充。
版本
锁定目录显示该条件最早见于 PostgreSQL 7.4;行为说明固定在 PostgreSQL 18.6 源码,目录存在范围不等于每条消息或功能都从该版本开始。
相关
来源
源码消息、行号和证据边界见 作者证据。
src/backend/parser/parse_utilcmd.c:4229-4233(fixed source)