# 01P01 — deprecated_feature

> PostgreSQL SQLSTATE 01P01 用 WARNING 宣布已弃用功能；PostgreSQL 18.6 有固定的 MD5 密码路径。
---

# 01P01 — deprecated_feature

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

PostgreSQL 18.6 在设置密码的操作产生或保留 MD5 verifier 时以 `WARNING` 发出 `01P01`。这是仍可继续的命令上的弃用通知，不是所有旧功能的通用失败码。

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

| 字段 | 值 |
| --- | --- |
| SQLSTATE | `01P01` |
| 条件名 | `deprecated_feature` |
| 状态 | `有效` |
| 已知存在于 | `8.0.0` |
| 锁定快照 | `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_WARNING_DEPRECATED_FEATURE` |
| 别名 | `—` |

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

## 含义 {#meaning}

确认的 18.6 实现是 `src/backend/libpq/crypt.c` 的设置密码路径，在最终 verifier 为 MD5 时发出 warning。触发依据是最终存储的 verifier 形式，例如 `password_encryption = 'md5'` 下的明文输入，或作为输入传入已有的 `md5...` verifier；它不是 `pg_hba.conf` 的认证方法，已有 SCRAM verifier 本身也不会触发此 warning。

## 消息与诊断 {#messages}

固定路径主消息为 `setting an MD5-encrypted password`；detail 为 `MD5 password support is deprecated and will be removed in a future release of PostgreSQL.`；hint 为 `Refer to the PostgreSQL documentation for details about migrating to another password type.`

## 诊断 {#diagnosis}

检查设置密码会话中的 `SHOW password_encryption`、输入是明文还是已有的 `md5...` verifier，并在有权限时检查角色最终 verifier。保留完整 warning，因为 detail 和 hint 指出了受影响的方法及迁移方向。不要把 `pg_hba.conf` 的认证方法当成触发条件，也不要把已有 SCRAM verifier 推断为此 warning 的原因。

## 处理 {#response}

按官方[密码认证文档](https://www.postgresql.org/docs/18/auth-password.html)将受影响角色迁移到 SCRAM；对于明文输入，先将 `password_encryption` 设为 `scram-sha-256`，再重置密码，并验证客户端兼容性。不要把旧 MD5 verifier 原样作为迁移步骤。warning 本身不要求原样重试设置密码命令。

## 版本 {#versions}

`01P01` 在锁定目录 9.0.23 至 18.6 以及 19 Beta 3 中存在，`known_present_by` 为 8.0.0。固定的 MD5 路径和措辞仅确认 18.6；其他弃用功能或旧措辞需要独立来源。

## 相关 {#related}

[`01000`](../01000/) 是警告类；[`28P01`](../28p01/) 是密码无效 error；[`00000`](../00000/) 是成功完成。

## 来源 {#sources}

- [`errcodes.txt`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt#L91) — 定义，SHA-256 `6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba`.
- [`crypt.c`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/crypt.c#L181-L185) — 固定路径，SHA-256 `d0c7579210827dbaec466f1c064a3d1ea2f7f7bfbf8b40b2e79fb4769cb406a9`。
- [结构化证据](../../data/evidence/01p01.json) — 固定来源、消息和运行边界。
