# 01P01 — deprecated_feature

> PostgreSQL SQLSTATE 01P01 is a WARNING used to announce a deprecated feature; PostgreSQL 18.6 has a fixed MD5-password path.
---

# 01P01 — deprecated_feature

## At a glance {#at-a-glance}

PostgreSQL 18.6 emits `01P01` at `WARNING` severity when a password-setting operation produces or preserves an MD5 verifier. This is a deprecation notice attached to a command that can still proceed, not a generic failure code for every old feature.

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

| Field | Value |
| --- | --- |
| SQLSTATE | `01P01` |
| Condition | `deprecated_feature` |
| Status | `active` |
| Known present by | `8.0.0` |
| Locked snapshots | `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` |
| Macros | `ERRCODE_WARNING_DEPRECATED_FEATURE` |
| Aliases | `—` |

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

## Meaning {#meaning}

The confirmed 18.6 implementation is the password-setting path in `src/backend/libpq/crypt.c`; it warns when the resulting verifier is MD5. The trigger is the final stored verifier form, such as plaintext input under `password_encryption = 'md5'` or an already `md5...` verifier supplied as input; it is not the `pg_hba.conf` authentication method, and an existing SCRAM verifier is not by itself this warning.

## Messages and diagnostics {#messages}

The fixed path reports `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 {#diagnosis}

Inspect the password-setting session's `SHOW password_encryption`, whether the input is plaintext or an existing `md5...` verifier, and the final role verifier when permissions allow. Keep the complete warning because the detail and hint state the affected method and migration direction. Do not use the `pg_hba.conf` authentication method as the trigger, and do not infer that an existing SCRAM verifier caused this warning.

## Response {#response}

Migrate the affected role to SCRAM by following the official [Password Authentication](https://www.postgresql.org/docs/18/auth-password.html) guidance; for plaintext input, set `password_encryption` to `scram-sha-256` before resetting the password, then verify client compatibility. Do not reuse an old MD5 verifier as the migration step. The warning itself does not call for retrying the password-setting command unchanged.

## Versions {#versions}

`01P01` is present from the locked 9.0.23 snapshot through 18.6 and 19 Beta 3, with `known_present_by` 8.0.0. The fixed MD5 path and wording are confirmed for 18.6; other deprecated features or older wording require their own source evidence.

## Related {#related}

[`01000`](../01000/) is the warning class; [`28P01`](../28p01/) is an invalid-password error; [`00000`](../00000/) is successful completion.

## Sources {#sources}

- [`errcodes.txt`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt#L91) — definition, SHA-256 `6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba`.
- [`crypt.c`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/crypt.c#L181-L185) — fixed path, SHA-256 `d0c7579210827dbaec466f1c064a3d1ea2f7f7bfbf8b40b2e79fb4769cb406a9`.
- [Structured evidence](../data/evidence/01p01.json) — fixed sources, message groups, and runtime boundary.
