# 42P12 — 无效数据库定义

> PostgreSQL SQLSTATE 42P12：来源与诊断参考。
---

# 42P12 — 无效数据库定义

## 速览 {#at-a-glance}

`42P12`（**invalid_database_definition**）该条件表示数据库定义无效，但本次扫描没有解析出核心发出路径。

<!-- BEGIN SQLSTATE FACTS: generated by scripts/generate.py; do not edit -->

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `42P12` |
| 条件名 | `invalid_database_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_DATABASE_DEFINITION` |
| 别名 | `—` |

<!-- source facts: data/errcodes/42P12.json -->
<!-- END SQLSTATE FACTS -->

## 含义 {#meaning}

目录将该条件定义为 invalid_database_definition。对 18.6 的有界调用扫描没有解析出该码的核心发出路径，因此本页说明条件边界，不臆造数据库操作触发场景。

## 诊断 {#diagnosis}

出现该码时保留服务器消息、数据库名、语句和服务器日志上下文。先确认响应来自 PostgreSQL 核心、扩展、客户端映射还是包装器；仅凭条件名不能确定失败的目录对象。

## 处理 {#response}

根据解析出的消息和固定版本源码路径选择修复。确认实际发出者后再检查受影响的数据库定义和依赖；本次有界扫描不足以支持更具体的 SQL 配方，也不能固定严重级别。如果实际响应是显式事务中的 ERROR，应遵循通常的 `ROLLBACK` 或错误前保存点恢复规则，但不要把这种通用协议恢复写成已确认的 42P12 发出路径。

## 消息 {#messages}

由于本次有界源码扫描没有解析出核心发出路径，这里不列出消息变体。

## 版本 {#versions}

锁定目录显示该条件最早见于 PostgreSQL 7.4；行为说明固定在 PostgreSQL 18.6 源码，目录存在范围不等于每条消息或功能都从该版本开始。

## 相关 {#related}

- [`3D000`](../3d000/)
- [`42P04`](../42p04/)

## 来源 {#sources}

源码消息、行号和证据边界见 [作者证据](../../data/evidence/42p12.json)。

- The fixed definition is recorded in [`errcodes.txt`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt#L393).
