# F0000 — config_file_error

> PostgreSQL SQLSTATE F0000 的源码核验与诊断参考。
---

# F0000

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

`F0000` 是配置文件错误条件，但严重性和恢复边界取决于所属调用者。固定核心路径包括归档恢复目标失败和 OAuth HBA 校验；unaccent contrib 词典还有自己的文件打开与规则解析路径。

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

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `F0000` |
| 条件名 | `config_file_error` |
| 状态 | `有效` |
| 已知存在于 | `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_CONFIG_FILE_ERROR` |
| 别名 | `—` |

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

## 含义 {#meaning}

归档恢复路径在到达配置目标之前结束时发出 `FATAL`。OAuth 校验使用 `ereport(elevel)`：HBA 解析器传入级别，`load_hba()` 在重载时以日志记录解析错误并保留旧规则，postmaster 初次启动时则把 HBA 加载失败转成另一个 `FATAL`，阻止启动。unaccent 加载器无法打开规则文件时报告 `ERROR`，重复规则和格式错误的规则行则以此 SQLSTATE 报告 `WARNING`。

这些是不同所属组件的路径。HBA 解析带行号和文件上下文；词典打开错误带 `%m`；归档恢复目标消息没有这两类字段。

## 消息 {#messages}

- **FATAL**，SQLSTATE `F0000`：`recovery ended before configured recovery target was reached`。
- **由 HBA 加载者选择 `elevel`**，SQLSTATE `F0000`：`oauth_validator_libraries must be set for authentication method %s`；上下文：`line %d of configuration file "%s"`。
- **由 HBA 加载者选择 `elevel`**：`invalid list syntax in parameter "%s"`。
- **由 HBA 加载者选择 `elevel`**：`authentication method "oauth" requires argument "validator" to be set when oauth_validator_libraries contains multiple options`；上下文：`line %d of configuration file "%s"`。
- **ERROR**，SQLSTATE `F0000`：`could not open unaccent file "%s": %m`。
- **WARNING**，SQLSTATE `F0000`：`duplicate source strings, first one will be used`。
- **WARNING**，SQLSTATE `F0000`：`invalid syntax: more than two strings in unaccent rule` 或 `invalid syntax: unfinished quoted string in unaccent rule`。

OAuth 模板使用 `ereport(elevel)`，因此函数源码本身不能把所有 HBA 事件都定为 `ERROR` 或 `FATAL`；实际启动/重载调用者决定边界。

## 诊断 {#diagnosis}

保留完整主消息、详细信息、提示、上下文、文件名、行号、子系统和阶段。归档恢复要检查配置目标与可用 WAL/归档。OAuth 要检查 HBA 行和 `oauth_validator_libraries` 值，区分空列表、列表语法和缺少 `validator` 参数。unaccent 要检查解析后的规则路径、权限、编码和规则格式；警告可能使词典继续加载并采用首条规则或跳过坏行。

## 处理 {#response}

按所属组件的格式修正配置，并保留已知正常副本。归档恢复目标的 `FATAL` 或首次 HBA 加载的 `FATAL` 会结束启动，没有客户端事务可回滚；修正目标/配置后重启并使用新连接。HBA 重载解析失败只记录日志并保留旧规则，修复文件后需再次重载，不能假设新规则已生效。unaccent `ERROR` 若在显式客户端事务中发生，继续执行前要 `ROLLBACK` 或回到已有保存点；警告路径不需要回滚，但应审查被跳过或重复的规则。

## 版本 {#versions}

锁定目录从 7.4 记录此条件；固定源码覆盖 PostgreSQL 18.6。本源码页没有诱发启动、重载或词典故障。

## 相关 {#related}

[`58P01`](../58p01/)、[`F0001`](../f0001/)、[`57P03`](../57p03/)

## 来源 {#sources}

[`src/backend/access/transam/xlogrecovery.c#L1921-L1931`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/access/transam/xlogrecovery.c#L1921)

[`src/backend/libpq/auth-oauth.c#L813-L870`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/auth-oauth.c#L813)

[`src/backend/libpq/hba.c#L2635-L2692`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/hba.c#L2635)

[`src/backend/postmaster/postmaster.c#L1327-L1338`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/postmaster/postmaster.c#L1327)

[`contrib/unaccent/unaccent.c#L65-L109`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/unaccent/unaccent.c#L65)

[`contrib/unaccent/unaccent.c#L260-L271`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/contrib/unaccent/unaccent.c#L260)

结构化[证据记录](../../data/evidence/f0000.json)保存固定消息组、调用者选择的 severity 和源码/运行边界。
