↑↓ select↵ open⌫ change scopeOpen full search

PG.CENTER connects PostgreSQL documentation, reference, and ecosystem knowledge. Maintained by Pigsty.

Wiki / SQLSTATE

01P01 — deprecated_feature

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.

English manual coverage begins with PostgreSQL 8.1. Source history and runtime observations have their own recorded version boundaries.

Reading PG 18·Select a recorded version

aliases
Unknown
class name
Warning
condition name
deprecated_feature
lang
en
sqlstate
01P01

Definition PG 18

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.

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 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 is the warning class; 28P01 is an invalid-password error; 00000 is successful completion.

Sources {#sources}

  • errcodes.txt — definition, SHA-256 6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba.
  • crypt.c — fixed path, SHA-256 d0c7579210827dbaec466f1c064a3d1ea2f7f7bfbf8b40b2e79fb4769cb406a9.
  • Structured evidence — fixed sources, message groups, and runtime boundary.

Compare versions

SQLSTATE evidence and recorded runtime versions

claims · identity
{
  "claim_id": "identity",
  "limits": "",
  "method": "Read the fixed errcodes definition row and macro.",
  "position": 0,
  "runtime": [],
  "sources": [
    "src.errcodes.18.6"
  ],
  "statement": "01P01 is deprecated_feature in SQLSTATE Class 01."
}
claims · source-path
{
  "claim_id": "source-path",
  "limits": "This confirms a source path and current wording; it is not a runtime observation of every installation.",
  "method": "Read the fixed source context around the SQLSTATE macro.",
  "position": 1,
  "runtime": [],
  "sources": [
    "src.crypt.18.6"
  ],
  "statement": "A fixed PostgreSQL 18.6 source path uses this SQLSTATE at the stated severity and operation."
}
claims · verifier-trigger
{
  "claim_id": "verifier-trigger",
  "limits": "Source evidence confirms the warning call site and exact fields; no natural password-setting runtime is claimed.",
  "method": "Read the fixed crypt.c warning call site and its password-setting context.",
  "position": 2,
  "runtime": [],
  "sources": [
    "src.crypt.18.6"
  ],
  "statement": "The fixed password-setting path is relevant when the resulting stored verifier is MD5; diagnose password_encryption and the supplied verifier form, and do not treat pg_hba.conf authentication method or an existing SCRAM verifier as this warning trigger."
}
messages · md5-password-deprecated
{
  "limits": "",
  "message_id": "md5-password-deprecated",
  "path": "L181-L185",
  "position": 0,
  "raw": {
    "detail_template": "MD5 password support is deprecated and will be removed in a future release of PostgreSQL.",
    "hint_template": "Refer to the PostgreSQL documentation for details about migrating to another password type.",
    "id": "md5-password-deprecated",
    "path": "L181-L185",
    "primary_template": "setting an MD5-encrypted password",
    "severity": "WARNING",
    "source_ids": [
      "src.crypt.18.6"
    ],
    "sources": [
      "src.crypt.18.6"
    ],
    "sqlstate": "01P01"
  },
  "severity": "WARNING",
  "sources": [
    "src.crypt.18.6"
  ],
  "templates": [
    {
      "kind": "primary",
      "literal": "setting an MD5-encrypted password",
      "position": 0,
      "role": "",
      "template": "setting an MD5-encrypted password"
    },
    {
      "kind": "detail",
      "literal": "MD5 password support is deprecated and will be removed in a future release of PostgreSQL.",
      "position": 1,
      "role": "",
      "template": "MD5 password support is deprecated and will be removed in a future release of PostgreSQL."
    },
    {
      "kind": "hint",
      "literal": "Refer to the PostgreSQL documentation for details about migrating to another password type.",
      "position": 2,
      "role": "",
      "template": "Refer to the PostgreSQL documentation for details about migrating to another password type."
    }
  ]
}
sources · src.errcodes.18.6
{
  "commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/utils/errcodes.txt",
  "position": 0,
  "sha256": "6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba",
  "source_id": "src.errcodes.18.6",
  "tag": "REL_18_6",
  "url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt"
}
sources · src.crypt.18.6
{
  "commit": "724edf9bde9d356724ad384a2e196edc3c9f80f7",
  "docs_url": "",
  "kind": "upstream_source",
  "location": "",
  "path": "src/backend/libpq/crypt.c",
  "position": 1,
  "sha256": "d0c7579210827dbaec466f1c064a3d1ea2f7f7bfbf8b40b2e79fb4769cb406a9",
  "source_id": "src.crypt.18.6",
  "tag": "REL_18_6",
  "url": "https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/crypt.c"
}
sources · src.calls.REL_18_6
{
  "commit": "",
  "docs_url": "",
  "kind": "local_artifact",
  "location": "",
  "path": "raw/calls/REL_18_6.jsonl",
  "position": 2,
  "sha256": "9ee8a0e81d8f0825c5c1ae45583439859a26e602bdd4ce2f2a62aa278867ccbf",
  "source_id": "src.calls.REL_18_6",
  "tag": "",
  "url": ""
}

Source references

Full definition and evidence JSON

Definition sources

center · PostgreSQL 18 · english-manuals:11b7083f8cc55032237c7e4152931fd262965d7d9f8a435cc694c8cc5f43b5ec

Text language: en · english-manuals:11b7083f8cc55032237c7e4152931fd262965d7d9f8a435cc694c8cc5f43b5ec