{"Entry":{"collection":"sqlstate","key":"28P01","name":"28P01","aliases":[],"metadata":{"aliases":[],"case_count":1,"class_code":"28","condition_name":"invalid_password","condition_names":["invalid_password"],"content_hash":"a7d75e1f39e8f588bfba8bc7a17af5ae790b80a33beffd5ffe0ec5e8164f72fa","depth":"full","editorial_review":"reviewed","evidence_tier":"observed_runtime","imported_at":"2026-09-30T17:45:27.324385+08:00","introduced":null,"known_present_by":"9.0.0","macros":["ERRCODE_INVALID_PASSWORD"],"name_zh":"密码无效","present_in":["9.0","9.1","9.2","9.3","9.4","9.5","9.6","10","11","12","13","14","15","16","17","18","19"],"preview_in":["19"],"primary_macro":"ERRCODE_INVALID_PASSWORD","removed":null,"runtime_verification":"passed","severity_classes":["E"],"snippet_count":1,"source_rev":"english-manuals:890476e06c67c07baa2c0404c5accab30fc55ff21e0e5f0cf28d7af62891e504","sqlstate":"28P01","status":"active","summary_zh":"建立会话时密码认证失败，连接被拒绝。"}},"Definition":{"Collection":"sqlstate","Key":"28P01","SourceDatabase":"center","Version":"18","SourceTable":"sqlstate","SourceKey":"28P01","SourceRevision":"english-manuals:890476e06c67c07baa2c0404c5accab30fc55ff21e0e5f0cf28d7af62891e504","Facts":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"56dacf78e618ff0fd8c533e05db597b80d7ebbad7f8e512a888217d0640aa328","slug":"18"},"lang":"en","sqlstate":"28P01"},"ManualEvidence":{"doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"56dacf78e618ff0fd8c533e05db597b80d7ebbad7f8e512a888217d0640aa328","slug":"18"}},"MeasuredEvidence":{}},"Text":{"Collection":"sqlstate","Key":"28P01","SourceDatabase":"center","Version":"","Locale":"zh-Hans","Title":"28P01 — invalid_password（密码无效）","Summary":"建立会话时密码认证失败，连接被拒绝。","BodyHTML":"\u003ch2\u003e速览 {#at-a-glance}\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003e28P01\u003c/code\u003e 是 PostgreSQL 类别 28 \u003ccode\u003einvalid_authorization_specification\u003c/code\u003e 中的 \u003ccode\u003einvalid_password\u003c/code\u003e 条件。客户端建立会话时密码认证失败，会产生这个代码。具体路径取决于认证方法、匹配的 \u003ccode\u003epg_hba.conf\u003c/code\u003e 规则和角色保存的密码。\u003c/p\u003e\n\u003cp\u003e这是 SQL 执行前的失败。被拒绝的会话没有事务可供回滚。最终运行中，psycopg 返回了启动异常文本，但暴露的 \u003ccode\u003esqlstate\u003c/code\u003e 为 \u003ccode\u003eNone\u003c/code\u003e；PostgreSQL collector 记录了服务器实际发送的 \u003ccode\u003eFATAL\u003c/code\u003e SQLSTATE \u003ccode\u003e28P01\u003c/code\u003e。不能把没有代码的驱动异常描述成客户端收到了 collector 字段。\u003c/p\u003e\n\u003cp\u003e案例 \u003ccode\u003ewrong_password_authentication\u003c/code\u003e 临时启用 \u003ccode\u003emd5\u003c/code\u003e 规则，使用错误密码连接，验证已知密码可以建立新会话并执行 \u003ccode\u003eSELECT 1\u003c/code\u003e，恢复原来的 HBA 配置，再验证新的管理连接。案例在 PostgreSQL 18.6 和隔离的 PostgreSQL 10.21 上均通过。run ID 和断言见\u003ca href=\"#sources\" rel=\"nofollow\"\u003e公开证据 JSON\u003c/a\u003e。\u003c/p\u003e\n\u003ch2\u003e含义与触发路径 {#meaning}\u003c/h2\u003e\n\u003cp\u003e服务器根据第一条匹配的 \u003ccode\u003epg_hba.conf\u003c/code\u003e 规则选择认证方法。密码、MD5 和 SCRAM 路径拒绝提交的密码时，\u003ccode\u003eauth.c\u003c/code\u003e 选择 \u003ccode\u003eERRCODE_INVALID_PASSWORD\u003c/code\u003e 并报告 \u003ccode\u003eFATAL\u003c/code\u003e。主报文模板是 \u003ccode\u003epassword authentication failed for user \u0026#34;%s\u0026#34;\u003c/code\u003e；服务器也可以在日志 detail 中加入匹配的 HBA 信息。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e28P01\u003c/code\u003e 不会区分所有认证配置问题。角色不存在、角色不允许登录、证书失败，或 HBA 规则选择了其他方法，都可能使用不同的 SQLSTATE 或报文。匹配的规则和认证方法是诊断的一部分。\u003c/p\u003e\n\u003cp\u003e失败发生在连接启动阶段，后端尚未接受 SQL。连接池应丢弃被拒绝的连接尝试，在密码或 HBA 配置修好后建立新的连接。仍在使用的所有者或管理连接可以恢复临时规则，但复用它们不能证明受影响角色可以认证。\u003c/p\u003e\n\u003ch2\u003e报文与诊断 {#messages}\u003c/h2\u003e\n\u003cp\u003e下面的 SQL 语句与 runner 使用的密码设置和探针相同。运行时 \u003ccode\u003eknown_user\u003c/code\u003e 和 \u003ccode\u003eexample-known-secret\u003c/code\u003e 会替换为临时值。修改 \u003ccode\u003epg_hba.conf\u003c/code\u003e 和使用错误密码建立连接属于启动操作，因此在 SQL 语句之间说明，而不是伪造 \u003ccode\u003eRAISE\u003c/code\u003e 或 SQL 错误。\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eALTER ROLE known_user PASSWORD \u0026#39;example-known-secret\u0026#39;;\n-- 在 pg_hba.conf 首行临时加入 host all all 0.0.0.0/0 md5。\n-- 使用错误密码以 known_user 连接：启动阶段返回 FATAL 28P01。\n-- 再使用已知密码建立连接并执行：\nSELECT 1;\n-- 恢复原 pg_hba.conf，建立新的管理连接并执行：\nSELECT 1;\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e最新目标的 collector 记录形状为：\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eSQLSTATE: 28P01\nseverity: FATAL\nmessage_primary: password authentication failed for user \u0026#34;\u0026lt;generated-role\u0026gt;\u0026#34;\ndetail (collector): Connection matched file \u0026#34;\u0026lt;pg_hba.conf path\u0026gt;\u0026#34; line 1: \u0026#34;host all all 0.0.0.0/0 md5\u0026#34;\nsource: auth.c / auth_failed / line 320\ndriver startup sqlstate: null\ntransaction: none opened\nrepair: known-password SELECT 1 -\u0026gt; 1; restore HBA; fresh owner SELECT 1 -\u0026gt; 1\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePostgreSQL 10.21 的 collector 产生相同的主报文和 SQLSTATE，源码位置为 \u003ccode\u003eauth.c:329\u003c/code\u003e；其 collector detail 使用较早的 \u003ccode\u003epg_hba.conf line\u003c/code\u003e 表述，并且还包含密码不匹配行。两个目标都在临时规则下用已知密码认证成功，重新加载原 HBA 配置，并让新的管理连接返回 \u003ccode\u003e1\u003c/code\u003e。驱动文本和 collector 字段是两条独立证据；本次运行中 libpq/psycopg 没有暴露启动 SQLSTATE。\u003c/p\u003e\n\u003ch2\u003e诊断 {#diagnosis}\u003c/h2\u003e\n\u003cp\u003e记录用户、数据库、连接来源、认证方法、服务器版本和第一条匹配的 HBA 规则，不要记录密码。按时间关联失败尝试和 verbose collector 记录。collector detail 可以指出 HBA 行，而客户端启动异常可能只有 FATAL 文本。\u003c/p\u003e\n\u003cp\u003e检查目标角色存在且允许登录，密码已针对选定方法设置，并确认更早的 HBA 规则没有截获连接。正确密码配在错误的 HBA 方法上不能证明部署正确。密码轮换完成前，应等待新的连接成功。\u003c/p\u003e\n\u003cp\u003e被拒绝的会话没有事务状态需要恢复。修改 HBA 规则时保留受控的管理连接，重新加载配置，并用新的客户端测试。测试完成后精确恢复原规则，再确认新的所有者连接仍可用。\u003c/p\u003e\n\u003ch2\u003e处理与修复 {#response}\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e为角色使用预期的密码和认证方法，通过不会把密码暴露到日志或命令历史的途径轮换密码。\u003c/li\u003e\n\u003cli\u003e检查第一条匹配的 \u003ccode\u003epg_hba.conf\u003c/code\u003e 规则，修正数据库、用户、地址和方法字段，然后重新加载配置。\u003c/li\u003e\n\u003cli\u003e用新的连接和真实的无害查询（例如 \u003ccode\u003eSELECT 1\u003c/code\u003e）测试受影响角色。\u003c/li\u003e\n\u003cli\u003e在新路径得到证明前保留管理访问，随后关闭仍保存旧密码的连接池陈旧会话。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e代表性修复同时包含已知密码连接和恢复后的新管理连接。仅成功调用 \u003ccode\u003epg_reload_conf()\u003c/code\u003e 不能证明认证已经修好，复用执行 reload 的连接也不能测试修复后的登录路径。\u003c/p\u003e\n\u003ch2\u003e版本与边界 {#versions}\u003c/h2\u003e\n\u003cp\u003e目录在第一份扫描到的定义（\u003ccode\u003e9.0.0\u003c/code\u003e 或更早）中已包含 \u003ccode\u003e28P01\u003c/code\u003e，并在列出的所有正式快照直到 PostgreSQL 18.6 以及 PostgreSQL 19 Beta 3 预览中存在。扫描范围内没有记录该条件的定义变化；9.0 以前的引入点仍未扫描。\u003c/p\u003e\n\u003cp\u003e错误密码案例在 PostgreSQL 18.6 和 10.21 上通过。源码行号随版本变化，驱动与 collector 的 SQLSTATE 差异是本启动路径的实测边界。证书、GSSAPI、PAM、LDAP、peer 和 HBA 语法失败是独立认证路径，本证据不覆盖。\u003c/p\u003e\n\u003ch2\u003e相关 {#related}\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"/wiki/sqlstate/53300/\" rel=\"nofollow\"\u003e\u003ccode\u003e53300\u003c/code\u003e — \u003ccode\u003etoo_many_connections\u003c/code\u003e\u003c/a\u003e 是连接启动阶段的容量失败。\u003ca href=\"/wiki/sqlstate/57014/\" rel=\"nofollow\"\u003e\u003ccode\u003e57014\u003c/code\u003e — \u003ccode\u003equery_canceled\u003c/code\u003e\u003c/a\u003e 发生在已连接后端执行语句时。\u003ca href=\"/wiki/sqlstate/42501/\" rel=\"nofollow\"\u003e\u003ccode\u003e42501\u003c/code\u003e — \u003ccode\u003einsufficient_privilege\u003c/code\u003e\u003c/a\u003e 是认证后的权限检查，不是密码诊断。\u003c/p\u003e\n\u003ch2\u003e来源 {#sources}\u003c/h2\u003e\n\u003cp\u003e结构化证据记录在\u003ca href=\"#sources\" rel=\"nofollow\"\u003e公开证据 JSON\u003c/a\u003e中。源码记录固定到 PostgreSQL commit \u003ccode\u003e724edf9bde9d356724ad384a2e196edc3c9f80f7\u003c/code\u003e；运行记录保留 collector 输出、驱动观察、HBA 恢复、两个目标 ID 和结构化观察。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esrc.errcodes.18.6\u003c/code\u003e — \u003ca href=\"https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt#L271-L278\" rel=\"nofollow\"\u003e\u003ccode\u003eerrcodes.txt\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esrc.auth.18.6\u003c/code\u003e — \u003ca href=\"https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/auth.c#L270-L332\" rel=\"nofollow\"\u003e\u003ccode\u003eauth.c\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edoc.client-auth.18\u003c/code\u003e — \u003ca href=\"/docs/18/auth-pg-hba-conf.html\" rel=\"nofollow\"\u003epg_hba.conf 文件\u003c/a\u003e 与 \u003ca href=\"/docs/18/auth-password.html\" rel=\"nofollow\"\u003e密码认证\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edoc.protocol.18\u003c/code\u003e — \u003ca href=\"/docs/18/protocol-error-fields.html\" rel=\"nofollow\"\u003e错误和通知消息字段\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRuntime：latest 与 pg10 均为 \u003ccode\u003e28P01-registry-final-20260909\u003c/code\u003e，结构化观察见\u003ca href=\"#sources\" rel=\"nofollow\"\u003e公开证据 JSON\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n","SourceRevision":"english-manuals:890476e06c67c07baa2c0404c5accab30fc55ff21e0e5f0cf28d7af62891e504","ContentHash":"4d141302f4181bf3a212256b9b73d1e8bd9958eea9f51f0ab152ba2f9e153bd1","Payload":{"body_md":"\n## 速览 {#at-a-glance}\n\n`28P01` 是 PostgreSQL 类别 28 `invalid_authorization_specification` 中的 `invalid_password` 条件。客户端建立会话时密码认证失败，会产生这个代码。具体路径取决于认证方法、匹配的 `pg_hba.conf` 规则和角色保存的密码。\n\n这是 SQL 执行前的失败。被拒绝的会话没有事务可供回滚。最终运行中，psycopg 返回了启动异常文本，但暴露的 `sqlstate` 为 `None`；PostgreSQL collector 记录了服务器实际发送的 `FATAL` SQLSTATE `28P01`。不能把没有代码的驱动异常描述成客户端收到了 collector 字段。\n\n案例 `wrong_password_authentication` 临时启用 `md5` 规则，使用错误密码连接，验证已知密码可以建立新会话并执行 `SELECT 1`，恢复原来的 HBA 配置，再验证新的管理连接。案例在 PostgreSQL 18.6 和隔离的 PostgreSQL 10.21 上均通过。run ID 和断言见[公开证据 JSON](#sources)。\n\n\n## 含义与触发路径 {#meaning}\n\n服务器根据第一条匹配的 `pg_hba.conf` 规则选择认证方法。密码、MD5 和 SCRAM 路径拒绝提交的密码时，`auth.c` 选择 `ERRCODE_INVALID_PASSWORD` 并报告 `FATAL`。主报文模板是 `password authentication failed for user \"%s\"`；服务器也可以在日志 detail 中加入匹配的 HBA 信息。\n\n`28P01` 不会区分所有认证配置问题。角色不存在、角色不允许登录、证书失败，或 HBA 规则选择了其他方法，都可能使用不同的 SQLSTATE 或报文。匹配的规则和认证方法是诊断的一部分。\n\n失败发生在连接启动阶段，后端尚未接受 SQL。连接池应丢弃被拒绝的连接尝试，在密码或 HBA 配置修好后建立新的连接。仍在使用的所有者或管理连接可以恢复临时规则，但复用它们不能证明受影响角色可以认证。\n\n## 报文与诊断 {#messages}\n\n下面的 SQL 语句与 runner 使用的密码设置和探针相同。运行时 `known_user` 和 `example-known-secret` 会替换为临时值。修改 `pg_hba.conf` 和使用错误密码建立连接属于启动操作，因此在 SQL 语句之间说明，而不是伪造 `RAISE` 或 SQL 错误。\n\n```sql\nALTER ROLE known_user PASSWORD 'example-known-secret';\n-- 在 pg_hba.conf 首行临时加入 host all all 0.0.0.0/0 md5。\n-- 使用错误密码以 known_user 连接：启动阶段返回 FATAL 28P01。\n-- 再使用已知密码建立连接并执行：\nSELECT 1;\n-- 恢复原 pg_hba.conf，建立新的管理连接并执行：\nSELECT 1;\n```\n\n最新目标的 collector 记录形状为：\n\n```text\nSQLSTATE: 28P01\nseverity: FATAL\nmessage_primary: password authentication failed for user \"\u003cgenerated-role\u003e\"\ndetail (collector): Connection matched file \"\u003cpg_hba.conf path\u003e\" line 1: \"host all all 0.0.0.0/0 md5\"\nsource: auth.c / auth_failed / line 320\ndriver startup sqlstate: null\ntransaction: none opened\nrepair: known-password SELECT 1 -\u003e 1; restore HBA; fresh owner SELECT 1 -\u003e 1\n```\n\nPostgreSQL 10.21 的 collector 产生相同的主报文和 SQLSTATE，源码位置为 `auth.c:329`；其 collector detail 使用较早的 `pg_hba.conf line` 表述，并且还包含密码不匹配行。两个目标都在临时规则下用已知密码认证成功，重新加载原 HBA 配置，并让新的管理连接返回 `1`。驱动文本和 collector 字段是两条独立证据；本次运行中 libpq/psycopg 没有暴露启动 SQLSTATE。\n\n## 诊断 {#diagnosis}\n\n记录用户、数据库、连接来源、认证方法、服务器版本和第一条匹配的 HBA 规则，不要记录密码。按时间关联失败尝试和 verbose collector 记录。collector detail 可以指出 HBA 行，而客户端启动异常可能只有 FATAL 文本。\n\n检查目标角色存在且允许登录，密码已针对选定方法设置，并确认更早的 HBA 规则没有截获连接。正确密码配在错误的 HBA 方法上不能证明部署正确。密码轮换完成前，应等待新的连接成功。\n\n被拒绝的会话没有事务状态需要恢复。修改 HBA 规则时保留受控的管理连接，重新加载配置，并用新的客户端测试。测试完成后精确恢复原规则，再确认新的所有者连接仍可用。\n\n## 处理与修复 {#response}\n\n- 为角色使用预期的密码和认证方法，通过不会把密码暴露到日志或命令历史的途径轮换密码。\n- 检查第一条匹配的 `pg_hba.conf` 规则，修正数据库、用户、地址和方法字段，然后重新加载配置。\n- 用新的连接和真实的无害查询（例如 `SELECT 1`）测试受影响角色。\n- 在新路径得到证明前保留管理访问，随后关闭仍保存旧密码的连接池陈旧会话。\n\n代表性修复同时包含已知密码连接和恢复后的新管理连接。仅成功调用 `pg_reload_conf()` 不能证明认证已经修好，复用执行 reload 的连接也不能测试修复后的登录路径。\n\n## 版本与边界 {#versions}\n\n目录在第一份扫描到的定义（`9.0.0` 或更早）中已包含 `28P01`，并在列出的所有正式快照直到 PostgreSQL 18.6 以及 PostgreSQL 19 Beta 3 预览中存在。扫描范围内没有记录该条件的定义变化；9.0 以前的引入点仍未扫描。\n\n错误密码案例在 PostgreSQL 18.6 和 10.21 上通过。源码行号随版本变化，驱动与 collector 的 SQLSTATE 差异是本启动路径的实测边界。证书、GSSAPI、PAM、LDAP、peer 和 HBA 语法失败是独立认证路径，本证据不覆盖。\n\n## 相关 {#related}\n\n[`53300` — `too_many_connections`](/wiki/sqlstate/53300/) 是连接启动阶段的容量失败。[`57014` — `query_canceled`](/wiki/sqlstate/57014/) 发生在已连接后端执行语句时。[`42501` — `insufficient_privilege`](/wiki/sqlstate/42501/) 是认证后的权限检查，不是密码诊断。\n\n## 来源 {#sources}\n\n结构化证据记录在[公开证据 JSON](#sources)中。源码记录固定到 PostgreSQL commit `724edf9bde9d356724ad384a2e196edc3c9f80f7`；运行记录保留 collector 输出、驱动观察、HBA 恢复、两个目标 ID 和结构化观察。\n\n- `src.errcodes.18.6` — [`errcodes.txt`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt#L271-L278)\n- `src.auth.18.6` — [`auth.c`](https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/auth.c#L270-L332)\n- `doc.client-auth.18` — [pg_hba.conf 文件](/docs/18/auth-pg-hba-conf.html) 与 [密码认证](/docs/18/auth-password.html)\n- `doc.protocol.18` — [错误和通知消息字段](/docs/18/protocol-error-fields.html)\n- Runtime：latest 与 pg10 均为 `28P01-registry-final-20260909`，结构化观察见[公开证据 JSON](#sources)\n","description":"密码认证在连接启动阶段失败时，PostgreSQL 会报告 SQLSTATE 28P01。应检查匹配的 pg_hba.conf 规则和角色密码，并用新的连接证明修复。","is_stale":false,"name":"密码无效","sections":[{"anchor":"at-a-glance","heading":"速览","html":"\u003cp\u003e\u003ccode\u003e28P01\u003c/code\u003e 是 PostgreSQL 类别 28 \u003ccode\u003einvalid_authorization_specification\u003c/code\u003e 中的 \u003ccode\u003einvalid_password\u003c/code\u003e 条件。客户端建立会话时密码认证失败，会产生这个代码。具体路径取决于认证方法、匹配的 \u003ccode\u003epg_hba.conf\u003c/code\u003e 规则和角色保存的密码。\u003c/p\u003e\n\u003cp\u003e这是 SQL 执行前的失败。被拒绝的会话没有事务可供回滚。最终运行中，psycopg 返回了启动异常文本，但暴露的 \u003ccode\u003esqlstate\u003c/code\u003e 为 \u003ccode\u003eNone\u003c/code\u003e；PostgreSQL collector 记录了服务器实际发送的 \u003ccode\u003eFATAL\u003c/code\u003e SQLSTATE \u003ccode\u003e28P01\u003c/code\u003e。不能把没有代码的驱动异常描述成客户端收到了 collector 字段。\u003c/p\u003e\n\u003cp\u003e案例 \u003ccode\u003ewrong_password_authentication\u003c/code\u003e 临时启用 \u003ccode\u003emd5\u003c/code\u003e 规则，使用错误密码连接，验证已知密码可以建立新会话并执行 \u003ccode\u003eSELECT 1\u003c/code\u003e，恢复原来的 HBA 配置，再验证新的管理连接。案例在 PostgreSQL 18.6 和隔离的 PostgreSQL 10.21 上均通过。run ID 和断言见\u003ca href=\"#sources\"\u003e公开证据 JSON\u003c/a\u003e。\u003c/p\u003e"},{"anchor":"meaning","heading":"含义与触发路径","html":"\u003cp\u003e服务器根据第一条匹配的 \u003ccode\u003epg_hba.conf\u003c/code\u003e 规则选择认证方法。密码、MD5 和 SCRAM 路径拒绝提交的密码时，\u003ccode\u003eauth.c\u003c/code\u003e 选择 \u003ccode\u003eERRCODE_INVALID_PASSWORD\u003c/code\u003e 并报告 \u003ccode\u003eFATAL\u003c/code\u003e。主报文模板是 \u003ccode\u003epassword authentication failed for user \"%s\"\u003c/code\u003e；服务器也可以在日志 detail 中加入匹配的 HBA 信息。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e28P01\u003c/code\u003e 不会区分所有认证配置问题。角色不存在、角色不允许登录、证书失败，或 HBA 规则选择了其他方法，都可能使用不同的 SQLSTATE 或报文。匹配的规则和认证方法是诊断的一部分。\u003c/p\u003e\n\u003cp\u003e失败发生在连接启动阶段，后端尚未接受 SQL。连接池应丢弃被拒绝的连接尝试，在密码或 HBA 配置修好后建立新的连接。仍在使用的所有者或管理连接可以恢复临时规则，但复用它们不能证明受影响角色可以认证。\u003c/p\u003e"},{"anchor":"messages","heading":"报文与诊断","html":"\u003cp\u003e下面的 SQL 语句与 runner 使用的密码设置和探针相同。运行时 \u003ccode\u003eknown_user\u003c/code\u003e 和 \u003ccode\u003eexample-known-secret\u003c/code\u003e 会替换为临时值。修改 \u003ccode\u003epg_hba.conf\u003c/code\u003e 和使用错误密码建立连接属于启动操作，因此在 SQL 语句之间说明，而不是伪造 \u003ccode\u003eRAISE\u003c/code\u003e 或 SQL 错误。\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-sql\"\u003eALTER ROLE known_user PASSWORD 'example-known-secret';\n-- 在 pg_hba.conf 首行临时加入 host all all 0.0.0.0/0 md5。\n-- 使用错误密码以 known_user 连接：启动阶段返回 FATAL 28P01。\n-- 再使用已知密码建立连接并执行：\nSELECT 1;\n-- 恢复原 pg_hba.conf，建立新的管理连接并执行：\nSELECT 1;\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e最新目标的 collector 记录形状为：\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-text\"\u003eSQLSTATE: 28P01\nseverity: FATAL\nmessage_primary: password authentication failed for user \u0026quot;\u0026lt;generated-role\u0026gt;\u0026quot;\ndetail (collector): Connection matched file \u0026quot;\u0026lt;pg_hba.conf path\u0026gt;\u0026quot; line 1: \u0026quot;host all all 0.0.0.0/0 md5\u0026quot;\nsource: auth.c / auth_failed / line 320\ndriver startup sqlstate: null\ntransaction: none opened\nrepair: known-password SELECT 1 -\u0026gt; 1; restore HBA; fresh owner SELECT 1 -\u0026gt; 1\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePostgreSQL 10.21 的 collector 产生相同的主报文和 SQLSTATE，源码位置为 \u003ccode\u003eauth.c:329\u003c/code\u003e；其 collector detail 使用较早的 \u003ccode\u003epg_hba.conf line\u003c/code\u003e 表述，并且还包含密码不匹配行。两个目标都在临时规则下用已知密码认证成功，重新加载原 HBA 配置，并让新的管理连接返回 \u003ccode\u003e1\u003c/code\u003e。驱动文本和 collector 字段是两条独立证据；本次运行中 libpq/psycopg 没有暴露启动 SQLSTATE。\u003c/p\u003e"},{"anchor":"diagnosis","heading":"诊断","html":"\u003cp\u003e记录用户、数据库、连接来源、认证方法、服务器版本和第一条匹配的 HBA 规则，不要记录密码。按时间关联失败尝试和 verbose collector 记录。collector detail 可以指出 HBA 行，而客户端启动异常可能只有 FATAL 文本。\u003c/p\u003e\n\u003cp\u003e检查目标角色存在且允许登录，密码已针对选定方法设置，并确认更早的 HBA 规则没有截获连接。正确密码配在错误的 HBA 方法上不能证明部署正确。密码轮换完成前，应等待新的连接成功。\u003c/p\u003e\n\u003cp\u003e被拒绝的会话没有事务状态需要恢复。修改 HBA 规则时保留受控的管理连接，重新加载配置，并用新的客户端测试。测试完成后精确恢复原规则，再确认新的所有者连接仍可用。\u003c/p\u003e"},{"anchor":"response","heading":"处理与修复","html":"\u003cul\u003e\n\u003cli\u003e为角色使用预期的密码和认证方法，通过不会把密码暴露到日志或命令历史的途径轮换密码。\u003c/li\u003e\n\u003cli\u003e检查第一条匹配的 \u003ccode\u003epg_hba.conf\u003c/code\u003e 规则，修正数据库、用户、地址和方法字段，然后重新加载配置。\u003c/li\u003e\n\u003cli\u003e用新的连接和真实的无害查询（例如 \u003ccode\u003eSELECT 1\u003c/code\u003e）测试受影响角色。\u003c/li\u003e\n\u003cli\u003e在新路径得到证明前保留管理访问，随后关闭仍保存旧密码的连接池陈旧会话。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e代表性修复同时包含已知密码连接和恢复后的新管理连接。仅成功调用 \u003ccode\u003epg_reload_conf()\u003c/code\u003e 不能证明认证已经修好，复用执行 reload 的连接也不能测试修复后的登录路径。\u003c/p\u003e"},{"anchor":"versions","heading":"版本与边界","html":"\u003cp\u003e目录在第一份扫描到的定义（\u003ccode\u003e9.0.0\u003c/code\u003e 或更早）中已包含 \u003ccode\u003e28P01\u003c/code\u003e，并在列出的所有正式快照直到 PostgreSQL 18.6 以及 PostgreSQL 19 Beta 3 预览中存在。扫描范围内没有记录该条件的定义变化；9.0 以前的引入点仍未扫描。\u003c/p\u003e\n\u003cp\u003e错误密码案例在 PostgreSQL 18.6 和 10.21 上通过。源码行号随版本变化，驱动与 collector 的 SQLSTATE 差异是本启动路径的实测边界。证书、GSSAPI、PAM、LDAP、peer 和 HBA 语法失败是独立认证路径，本证据不覆盖。\u003c/p\u003e"},{"anchor":"related","heading":"相关","html":"\u003cp\u003e\u003ca href=\"/wiki/sqlstate/53300/\"\u003e\u003ccode\u003e53300\u003c/code\u003e — \u003ccode\u003etoo_many_connections\u003c/code\u003e\u003c/a\u003e 是连接启动阶段的容量失败。\u003ca href=\"/wiki/sqlstate/57014/\"\u003e\u003ccode\u003e57014\u003c/code\u003e — \u003ccode\u003equery_canceled\u003c/code\u003e\u003c/a\u003e 发生在已连接后端执行语句时。\u003ca href=\"/wiki/sqlstate/42501/\"\u003e\u003ccode\u003e42501\u003c/code\u003e — \u003ccode\u003einsufficient_privilege\u003c/code\u003e\u003c/a\u003e 是认证后的权限检查，不是密码诊断。\u003c/p\u003e"},{"anchor":"sources","heading":"来源","html":"\u003cp\u003e结构化证据记录在\u003ca href=\"#sources\"\u003e公开证据 JSON\u003c/a\u003e中。源码记录固定到 PostgreSQL commit \u003ccode\u003e724edf9bde9d356724ad384a2e196edc3c9f80f7\u003c/code\u003e；运行记录保留 collector 输出、驱动观察、HBA 恢复、两个目标 ID 和结构化观察。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esrc.errcodes.18.6\u003c/code\u003e — \u003ca href=\"https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/utils/errcodes.txt#L271-L278\"\u003e\u003ccode\u003eerrcodes.txt\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esrc.auth.18.6\u003c/code\u003e — \u003ca href=\"https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/auth.c#L270-L332\"\u003e\u003ccode\u003eauth.c\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edoc.client-auth.18\u003c/code\u003e — \u003ca href=\"/docs/18/auth-pg-hba-conf.html\"\u003epg_hba.conf 文件\u003c/a\u003e 与 \u003ca href=\"/docs/18/auth-password.html\"\u003e密码认证\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edoc.protocol.18\u003c/code\u003e — \u003ca href=\"/docs/18/protocol-error-fields.html\"\u003e错误和通知消息字段\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRuntime：latest 与 pg10 均为 \u003ccode\u003e28P01-registry-final-20260909\u003c/code\u003e，结构化观察见\u003ca href=\"#sources\"\u003e公开证据 JSON\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e"}],"summary":"建立会话时密码认证失败，连接被拒绝。","title":"28P01 — invalid_password（密码无效）","translation_source_rev":"c4fa989e08750813ed001cbb014f169ddebbeb317c1f3f88884f965788780176"}},"RequestedLocale":"zh-Hans","Fallback":false,"Versions":["10","11","12","13","14","15","16","17","18","19","20","9.0","9.1","9.2","9.3","9.4","9.5","9.6"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":{"aliases":[],"catalogue_notes":{"earliest_observed":"9.0.0","formal_scope":"9.0.0..18.6","latest_observed":"18.6","matrix_scope":["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"],"pre9_scope":{"formal_tag_count":191,"maximum_release":"8.4.22","minimum_release":"7.0.0","source_definition_count":153,"source_doc_count":153,"source_file_count":306,"source_scope":"7.4..8.4 definition files; 7.0..7.3 candidate-path source gap probes","source_tag_count":153},"pre9_status":"not_observed","preview_scope":["19beta3"]},"class":"28","class_name":"Invalid Authorization Specification","condition_name":"invalid_password","condition_names":["invalid_password"],"definition_changes":[],"english_manuals":{"10":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"9607b57e9f639b61785677ba4d226f5889fe1d19c8bf55a3337691899a9073cd","slug":"10"},"lang":"en","sqlstate":"28P01"},"11":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"3a024e38263ad77de228eed7930b842b42dc1d5cab9ca3727be8eed872ec9539","slug":"11"},"lang":"en","sqlstate":"28P01"},"12":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"1444bd6a138537cd75be88a220ee9472ac528f0cfc58758e49636d85455efe98","slug":"12"},"lang":"en","sqlstate":"28P01"},"13":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"4a3ef8af218e5736dfde8660ba609e84233b6b3bac7e0210ff8724cf1b27b2db","slug":"13"},"lang":"en","sqlstate":"28P01"},"14":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"1c12e83304e0f4ff64c9d98ca5e3007df6756932ed19867a4fa0e0650f6c5751","slug":"14"},"lang":"en","sqlstate":"28P01"},"15":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"2161f58f6e87f6535b3b1f3d4661427bb6765f4f6b074fcc16fac97594b50599","slug":"15"},"lang":"en","sqlstate":"28P01"},"16":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"928e705933d7c3d018ae3fba9d800b34e6325746d157339dce878473c519d100","slug":"16"},"lang":"en","sqlstate":"28P01"},"17":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"868135520af87351e3ea1ba42656111cbd2d157d98e1fef05ea158ac5729d8b1","slug":"17"},"lang":"en","sqlstate":"28P01"},"18":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"56dacf78e618ff0fd8c533e05db597b80d7ebbad7f8e512a888217d0640aa328","slug":"18"},"lang":"en","sqlstate":"28P01"},"19":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"63fb8d1aa9f494eeab9d0f8542a2b673f7746ee41ae2689d19403cb3cc425a5c","slug":"19"},"lang":"en","sqlstate":"28P01"},"20":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"0d3f602127cd137cf343b32d5fa78f175eeb6cdcb6353b1f6f998ede6cb7b911","slug":"devel"},"lang":"en","sqlstate":"28P01"},"9.0":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"658fc09c4c10eed7ac7dea4ed3e3eff8cc5791eb5af26b7b4a31b0f863b316db","slug":"9.0"},"lang":"en","sqlstate":"28P01"},"9.1":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"2d118b06c3b644c28b3ddefe9e4bef99a180321582209332372a5318f5bf8d1c","slug":"9.1"},"lang":"en","sqlstate":"28P01"},"9.2":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"2a37575b39c858d37c58fc4de6a16109554fd3306602294180d78faa1170d2cd","slug":"9.2"},"lang":"en","sqlstate":"28P01"},"9.3":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"2214b6869d764f7fba7221aefcdf1ab049b55ad51d63aa52054f3cd2c2533ae9","slug":"9.3"},"lang":"en","sqlstate":"28P01"},"9.4":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"7243e2d653befe88733222ede67958f0c4b7fae967b58eb97807aeb3f32b4096","slug":"9.4"},"lang":"en","sqlstate":"28P01"},"9.5":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"d40bc67cb331f1e4ccc0821ff57832c6c230edb0dce3ba4249defd21ae7ea29d","slug":"9.5"},"lang":"en","sqlstate":"28P01"},"9.6":{"aliases":[],"class_name":"Invalid Authorization Specification","condition_name":"invalid_password","doc":{"anchor":"ERRCODES-APPENDIX","file":"errcodes-appendix.html","lang":"en","sha256":"2ab55e487571c8998ec39b3d1bbae29ac6fc5c310875bee422d9a7b8b3fde5b3","slug":"9.6"},"lang":"en","sqlstate":"28P01"}},"history_boundary":{"earliest_observed":"9.0.0","formal_tag_count":351,"gaps":[{"after":"18.6","before":"18.4","reason":"Non-adjacent release tags or a source gap; no removal is inferred."}],"latest_observed":"18.6","pre_range":{"first_observed":null,"known_lower_bound":null,"last_observed":null,"notes":"No occurrence was observed in the locked 7.4..8.4 definition files. Source gaps for 7.0..7.3 prevent a claim that the code was absent before 7.4.","scanned_formal_release_count":153,"scanned_source_scope":"7.4..8.4 definition files; 7.0..7.3 candidate-path source gap probes","source_gap_majors":["7.0","7.1","7.2","7.3"],"status":"partially_scanned"},"preview_snapshots":["19beta3"],"scanned_from":"9.0.0","scanned_to":"18.6"},"introduced":null,"known_present_by":"9.0.0","macros":["ERRCODE_INVALID_PASSWORD"],"manual_presence":["9.0","9.1","9.2","9.3","9.4","9.5","9.6","10","11","12","13","14","15","16","17","18","19","20"],"pre9_first_observed":null,"pre9_introduction_boundary":null,"pre9_last_observed":null,"pre9_presence_intervals":[],"pre9_status":"not_observed","presence_intervals":[{"end":"9.0.23","end_major":"9.0","end_tag":"REL9_0_23","evidence_count":24,"position":0,"start":"9.0.0","start_major":"9.0","start_tag":"REL9_0_0"},{"end":"9.1.24","end_major":"9.1","end_tag":"REL9_1_24","evidence_count":25,"position":1,"start":"9.1.0","start_major":"9.1","start_tag":"REL9_1_0"},{"end":"9.2.24","end_major":"9.2","end_tag":"REL9_2_24","evidence_count":25,"position":2,"start":"9.2.0","start_major":"9.2","start_tag":"REL9_2_0"},{"end":"9.3.25","end_major":"9.3","end_tag":"REL9_3_25","evidence_count":26,"position":3,"start":"9.3.0","start_major":"9.3","start_tag":"REL9_3_0"},{"end":"9.4.26","end_major":"9.4","end_tag":"REL9_4_26","evidence_count":27,"position":4,"start":"9.4.0","start_major":"9.4","start_tag":"REL9_4_0"},{"end":"9.5.25","end_major":"9.5","end_tag":"REL9_5_25","evidence_count":26,"position":5,"start":"9.5.0","start_major":"9.5","start_tag":"REL9_5_0"},{"end":"9.6.24","end_major":"9.6","end_tag":"REL9_6_24","evidence_count":25,"position":6,"start":"9.6.0","start_major":"9.6","start_tag":"REL9_6_0"},{"end":"10.23","end_major":"10","end_tag":"REL_10_23","evidence_count":24,"position":7,"start":"10.0","start_major":"10","start_tag":"REL_10_0"},{"end":"11.22","end_major":"11","end_tag":"REL_11_22","evidence_count":23,"position":8,"start":"11.0","start_major":"11","start_tag":"REL_11_0"},{"end":"12.22","end_major":"12","end_tag":"REL_12_22","evidence_count":23,"position":9,"start":"12.0","start_major":"12","start_tag":"REL_12_0"},{"end":"13.23","end_major":"13","end_tag":"REL_13_23","evidence_count":24,"position":10,"start":"13.0","start_major":"13","start_tag":"REL_13_0"},{"end":"14.24","end_major":"14","end_tag":"REL_14_24","evidence_count":25,"position":11,"start":"14.0","start_major":"14","start_tag":"REL_14_0"},{"end":"15.19","end_major":"15","end_tag":"REL_15_19","evidence_count":20,"position":12,"start":"15.0","start_major":"15","start_tag":"REL_15_0"},{"end":"16.15","end_major":"16","end_tag":"REL_16_15","evidence_count":16,"position":13,"start":"16.0","start_major":"16","start_tag":"REL_16_0"},{"end":"17.11","end_major":"17","end_tag":"REL_17_11","evidence_count":12,"position":14,"start":"17.0","start_major":"17","start_tag":"REL_17_0"},{"end":"18.4","end_major":"18","end_tag":"REL_18_4","evidence_count":5,"position":15,"start":"18.0","start_major":"18","start_tag":"REL_18_0"},{"end":"18.6","end_major":"18","end_tag":"REL_18_6","evidence_count":1,"position":16,"start":"18.6","start_major":"18","start_tag":"REL_18_6"}],"present_in_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"],"preview_in_snapshots":["19beta3"],"primary_macro":"ERRCODE_INVALID_PASSWORD","removed":null,"schema_version":2,"severity_classes":["E"],"sources":[{"blob_id":"sha256:c814fbe5a5d2a61abe5bcf5c7754a9d339664aa4ee73f46fa11ed14966ff6713","channel":"formal","code_count":198,"commit":"861861edcc04a6e3ebdfe363311f122e2b226196","id":"postgresql:REL9_0_0:src/include/utils/errcodes.h","major":"9.0","parsed_path":"raw/definitions/REL9_0_0.parsed.json","path":"src/include/utils/errcodes.h","raw_path":"raw/definitions/REL9_0_0.h","raw_url":"https://raw.githubusercontent.com/postgres/postgres/861861edcc04a6e3ebdfe363311f122e2b226196/src/include/utils/errcodes.h","record_count":204,"release":"9.0.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"c814fbe5a5d2a61abe5bcf5c7754a9d339664aa4ee73f46fa11ed14966ff6713","size":21313,"source_format":"errcodes.h","source_role":"primary_definition","tag":"REL9_0_0","url":"https://github.com/postgres/postgres/blob/861861edcc04a6e3ebdfe363311f122e2b226196/src/include/utils/errcodes.h","version":"9.0.0"},{"blob_id":"sha256:e23d5129578249fc242f2737be2a577d6714b57917aad9deaf5ec156cadc52fd","channel":"formal","code_count":199,"commit":"ffb39e1aedcdd7b77ec920221b27ab02c40ddbfc","id":"postgresql:REL9_0_4:src/include/utils/errcodes.h","major":"9.0","parsed_path":"raw/definitions/REL9_0_4.parsed.json","path":"src/include/utils/errcodes.h","raw_path":"raw/definitions/REL9_0_4.h","raw_url":"https://raw.githubusercontent.com/postgres/postgres/ffb39e1aedcdd7b77ec920221b27ab02c40ddbfc/src/include/utils/errcodes.h","record_count":205,"release":"9.0.4","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"e23d5129578249fc242f2737be2a577d6714b57917aad9deaf5ec156cadc52fd","size":21384,"source_format":"errcodes.h","source_role":"primary_definition","tag":"REL9_0_4","url":"https://github.com/postgres/postgres/blob/ffb39e1aedcdd7b77ec920221b27ab02c40ddbfc/src/include/utils/errcodes.h","version":"9.0.4"},{"blob_id":"sha256:5b77881aab6f0d659fb3295e1adf53799a02c3d5680200bb10ff9f15d741f924","channel":"formal","code_count":199,"commit":"391aa8aac11fe78f3b2f5743b56e78b0ad6a5d84","id":"postgresql:REL9_0_18:src/include/utils/errcodes.h","major":"9.0","parsed_path":"raw/definitions/REL9_0_18.parsed.json","path":"src/include/utils/errcodes.h","raw_path":"raw/definitions/REL9_0_18.h","raw_url":"https://raw.githubusercontent.com/postgres/postgres/391aa8aac11fe78f3b2f5743b56e78b0ad6a5d84/src/include/utils/errcodes.h","record_count":205,"release":"9.0.18","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"5b77881aab6f0d659fb3295e1adf53799a02c3d5680200bb10ff9f15d741f924","size":21385,"source_format":"errcodes.h","source_role":"primary_definition","tag":"REL9_0_18","url":"https://github.com/postgres/postgres/blob/391aa8aac11fe78f3b2f5743b56e78b0ad6a5d84/src/include/utils/errcodes.h","version":"9.0.18"},{"blob_id":"sha256:2b1d71c453a82488c4e95df84a9ee18dc8fdcb2532a7c56f44f1e8c4265a8132","channel":"formal","code_count":228,"commit":"1f43001424a9da624a89b213d0be606a8212a50a","id":"postgresql:REL9_1_0:src/backend/utils/errcodes.txt","major":"9.1","parsed_path":"raw/definitions/REL9_1_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL9_1_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/1f43001424a9da624a89b213d0be606a8212a50a/src/backend/utils/errcodes.txt","record_count":234,"release":"9.1.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"2b1d71c453a82488c4e95df84a9ee18dc8fdcb2532a7c56f44f1e8c4265a8132","size":29355,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL9_1_0","url":"https://github.com/postgres/postgres/blob/1f43001424a9da624a89b213d0be606a8212a50a/src/backend/utils/errcodes.txt","version":"9.1.0"},{"blob_id":"sha256:271a522fcd18ec45ebe4c1235af0e27a0e9bf0376fda4073b9f4a9c0a00fc711","channel":"formal","code_count":232,"commit":"ef47adb414e46099155c34529a2a5caeea02fc41","id":"postgresql:REL9_2_0:src/backend/utils/errcodes.txt","major":"9.2","parsed_path":"raw/definitions/REL9_2_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL9_2_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/ef47adb414e46099155c34529a2a5caeea02fc41/src/backend/utils/errcodes.txt","record_count":238,"release":"9.2.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"271a522fcd18ec45ebe4c1235af0e27a0e9bf0376fda4073b9f4a9c0a00fc711","size":30387,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL9_2_0","url":"https://github.com/postgres/postgres/blob/ef47adb414e46099155c34529a2a5caeea02fc41/src/backend/utils/errcodes.txt","version":"9.2.0"},{"blob_id":"sha256:f90d801e724191c84e94ae33483e71b4e3c4de5730474d316df4c722a149897d","channel":"formal","code_count":232,"commit":"da645b3a73580ac30cf02e932b42d06157b98229","id":"postgresql:REL9_3_0:src/backend/utils/errcodes.txt","major":"9.3","parsed_path":"raw/definitions/REL9_3_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL9_3_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/da645b3a73580ac30cf02e932b42d06157b98229/src/backend/utils/errcodes.txt","record_count":238,"release":"9.3.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"f90d801e724191c84e94ae33483e71b4e3c4de5730474d316df4c722a149897d","size":30387,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL9_3_0","url":"https://github.com/postgres/postgres/blob/da645b3a73580ac30cf02e932b42d06157b98229/src/backend/utils/errcodes.txt","version":"9.3.0"},{"blob_id":"sha256:1695ec274fb29f0b0875ff674405e775334243835a6f6008e007dfe3a8260bf5","channel":"formal","code_count":232,"commit":"8ca336f4ac3f08a5f23e76c6e9a5f2c8064f5883","id":"postgresql:REL9_4_0:src/backend/utils/errcodes.txt","major":"9.4","parsed_path":"raw/definitions/REL9_4_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL9_4_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/8ca336f4ac3f08a5f23e76c6e9a5f2c8064f5883/src/backend/utils/errcodes.txt","record_count":238,"release":"9.4.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"1695ec274fb29f0b0875ff674405e775334243835a6f6008e007dfe3a8260bf5","size":30387,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL9_4_0","url":"https://github.com/postgres/postgres/blob/8ca336f4ac3f08a5f23e76c6e9a5f2c8064f5883/src/backend/utils/errcodes.txt","version":"9.4.0"},{"blob_id":"sha256:37f728a7e034ef0b05b060a4b82c7dd95c900e4a5501c80bfefd8d679889253b","channel":"formal","code_count":236,"commit":"cdd4ed5449bf317cc71b45a8deee0173822e7592","id":"postgresql:REL9_5_0:src/backend/utils/errcodes.txt","major":"9.5","parsed_path":"raw/definitions/REL9_5_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL9_5_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/cdd4ed5449bf317cc71b45a8deee0173822e7592/src/backend/utils/errcodes.txt","record_count":242,"release":"9.5.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"37f728a7e034ef0b05b060a4b82c7dd95c900e4a5501c80bfefd8d679889253b","size":30798,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL9_5_0","url":"https://github.com/postgres/postgres/blob/cdd4ed5449bf317cc71b45a8deee0173822e7592/src/backend/utils/errcodes.txt","version":"9.5.0"},{"blob_id":"sha256:bf4d94d84c7cfe695cb80e8f009872444574719a80a72e347eb66ef3686b86ef","channel":"formal","code_count":238,"commit":"a721a1ba9cf6c86cb52f1bf325d5a27b64e870d6","id":"postgresql:REL9_6_0:src/backend/utils/errcodes.txt","major":"9.6","parsed_path":"raw/definitions/REL9_6_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL9_6_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/a721a1ba9cf6c86cb52f1bf325d5a27b64e870d6/src/backend/utils/errcodes.txt","record_count":244,"release":"9.6.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"bf4d94d84c7cfe695cb80e8f009872444574719a80a72e347eb66ef3686b86ef","size":31135,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL9_6_0","url":"https://github.com/postgres/postgres/blob/a721a1ba9cf6c86cb52f1bf325d5a27b64e870d6/src/backend/utils/errcodes.txt","version":"9.6.0"},{"blob_id":"sha256:e5d829b24fe63aa69429fa1deb9675051fc8ffd4a8a4651861907a8f12ccb144","channel":"formal","code_count":240,"commit":"5df0e99bea1c3e5fbffa7fbd0982da88ea149bb6","id":"postgresql:REL_10_0:src/backend/utils/errcodes.txt","major":"10","parsed_path":"raw/definitions/REL_10_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL_10_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/5df0e99bea1c3e5fbffa7fbd0982da88ea149bb6/src/backend/utils/errcodes.txt","record_count":246,"release":"10.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"e5d829b24fe63aa69429fa1deb9675051fc8ffd4a8a4651861907a8f12ccb144","size":31340,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL_10_0","url":"https://github.com/postgres/postgres/blob/5df0e99bea1c3e5fbffa7fbd0982da88ea149bb6/src/backend/utils/errcodes.txt","version":"10.0"},{"blob_id":"sha256:8518be6de92ae135765e295c631c5f525120ca2b132453404b620f9aa595cab4","channel":"formal","code_count":241,"commit":"19f20081df059fef87e14c8e953669bd173dd7f1","id":"postgresql:REL_11_0:src/backend/utils/errcodes.txt","major":"11","parsed_path":"raw/definitions/REL_11_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL_11_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/19f20081df059fef87e14c8e953669bd173dd7f1/src/backend/utils/errcodes.txt","record_count":247,"release":"11.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"8518be6de92ae135765e295c631c5f525120ca2b132453404b620f9aa595cab4","size":31453,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL_11_0","url":"https://github.com/postgres/postgres/blob/19f20081df059fef87e14c8e953669bd173dd7f1/src/backend/utils/errcodes.txt","version":"11.0"},{"blob_id":"sha256:943259f3e36af1343dd0f090f7c7cec0e8c762b038d68c178aaa9b1b11999bfb","channel":"formal","code_count":257,"commit":"ad1f2885b8c82e0c2d56d7974f012cbecce17a17","id":"postgresql:REL_12_0:src/backend/utils/errcodes.txt","major":"12","parsed_path":"raw/definitions/REL_12_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL_12_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/ad1f2885b8c82e0c2d56d7974f012cbecce17a17/src/backend/utils/errcodes.txt","record_count":263,"release":"12.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"943259f3e36af1343dd0f090f7c7cec0e8c762b038d68c178aaa9b1b11999bfb","size":33114,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL_12_0","url":"https://github.com/postgres/postgres/blob/ad1f2885b8c82e0c2d56d7974f012cbecce17a17/src/backend/utils/errcodes.txt","version":"12.0"},{"blob_id":"sha256:9a464a3c3c99d2488782d4cdd0d46ce261085a944cb0c21e2d884586fbc8204d","channel":"formal","code_count":258,"commit":"29be9983a64c011eac0b9ee29895cce71e15ea77","id":"postgresql:REL_13_0:src/backend/utils/errcodes.txt","major":"13","parsed_path":"raw/definitions/REL_13_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL_13_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/29be9983a64c011eac0b9ee29895cce71e15ea77/src/backend/utils/errcodes.txt","record_count":264,"release":"13.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"9a464a3c3c99d2488782d4cdd0d46ce261085a944cb0c21e2d884586fbc8204d","size":33239,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL_13_0","url":"https://github.com/postgres/postgres/blob/29be9983a64c011eac0b9ee29895cce71e15ea77/src/backend/utils/errcodes.txt","version":"13.0"},{"blob_id":"sha256:c3c967fa20577f7ded946cb99e1a4706b85bb2476fd32d7e4a133c971a603552","channel":"formal","code_count":259,"commit":"86a4dc1e6f29d1992a2afa3fac1a0b0a6e84568c","id":"postgresql:REL_14_0:src/backend/utils/errcodes.txt","major":"14","parsed_path":"raw/definitions/REL_14_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL_14_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/86a4dc1e6f29d1992a2afa3fac1a0b0a6e84568c/src/backend/utils/errcodes.txt","record_count":265,"release":"14.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"c3c967fa20577f7ded946cb99e1a4706b85bb2476fd32d7e4a133c971a603552","size":33337,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL_14_0","url":"https://github.com/postgres/postgres/blob/86a4dc1e6f29d1992a2afa3fac1a0b0a6e84568c/src/backend/utils/errcodes.txt","version":"14.0"},{"blob_id":"sha256:a34b5fccd8a27c92817314dd942b79e76896cd1d9a8d4be21c81b02227850b4a","channel":"formal","code_count":260,"commit":"2a7ce2e2ce474504a707ec03e128fde66cfb8b48","id":"postgresql:REL_15_0:src/backend/utils/errcodes.txt","major":"15","parsed_path":"raw/definitions/REL_15_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL_15_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/2a7ce2e2ce474504a707ec03e128fde66cfb8b48/src/backend/utils/errcodes.txt","record_count":266,"release":"15.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"a34b5fccd8a27c92817314dd942b79e76896cd1d9a8d4be21c81b02227850b4a","size":33458,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL_15_0","url":"https://github.com/postgres/postgres/blob/2a7ce2e2ce474504a707ec03e128fde66cfb8b48/src/backend/utils/errcodes.txt","version":"15.0"},{"blob_id":"sha256:1d1d741b7b7c6dfd8275287e31c79befed75f3b9349e1a42ef0ca147c429ff88","channel":"formal","code_count":260,"commit":"c372fbbd8e911f2412b80a8c39d7079366565d67","id":"postgresql:REL_16_0:src/backend/utils/errcodes.txt","major":"16","parsed_path":"raw/definitions/REL_16_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL_16_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/c372fbbd8e911f2412b80a8c39d7079366565d67/src/backend/utils/errcodes.txt","record_count":266,"release":"16.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"1d1d741b7b7c6dfd8275287e31c79befed75f3b9349e1a42ef0ca147c429ff88","size":33458,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL_16_0","url":"https://github.com/postgres/postgres/blob/c372fbbd8e911f2412b80a8c39d7079366565d67/src/backend/utils/errcodes.txt","version":"16.0"},{"blob_id":"sha256:bb53279934510355eb4135a807c90d989f07650bd90f87026a4441f11d3296b1","channel":"formal","code_count":260,"commit":"d7ec59a63d745ba74fba0e280bbf85dc6d1caa3e","id":"postgresql:REL_17_0:src/backend/utils/errcodes.txt","major":"17","parsed_path":"raw/definitions/REL_17_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL_17_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/d7ec59a63d745ba74fba0e280bbf85dc6d1caa3e/src/backend/utils/errcodes.txt","record_count":266,"release":"17.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"bb53279934510355eb4135a807c90d989f07650bd90f87026a4441f11d3296b1","size":33392,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL_17_0","url":"https://github.com/postgres/postgres/blob/d7ec59a63d745ba74fba0e280bbf85dc6d1caa3e/src/backend/utils/errcodes.txt","version":"17.0"},{"blob_id":"sha256:6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba","channel":"formal","code_count":262,"commit":"3d6a828938a5fa0444275d3d2f67b64ec3199eb7","id":"postgresql:REL_18_0:src/backend/utils/errcodes.txt","major":"18","parsed_path":"raw/definitions/REL_18_0.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL_18_0.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/3d6a828938a5fa0444275d3d2f67b64ec3199eb7/src/backend/utils/errcodes.txt","record_count":268,"release":"18.0","release_date":null,"repository":"https://github.com/postgres/postgres.git","sha256":"6e8de346643ba84aa3c9c6a73360acfc7b2dfb89162c06c08ce9bf5bcd5bbcba","size":33739,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL_18_0","url":"https://github.com/postgres/postgres/blob/3d6a828938a5fa0444275d3d2f67b64ec3199eb7/src/backend/utils/errcodes.txt","version":"18.0"},{"blob_id":"sha256:cadb9e83cde9a8699a7e74448891ca623af8579ccc8e11c7e533fb47cbc42f89","channel":"preview","code_count":262,"commit":"3638289fb57bdabec00deda98ee9624a35f5d66a","id":"postgresql:REL_19_BETA3:src/backend/utils/errcodes.txt","major":"19","parsed_path":"raw/definitions/REL_19_BETA3.parsed.json","path":"src/backend/utils/errcodes.txt","raw_path":"raw/definitions/REL_19_BETA3.txt","raw_url":"https://raw.githubusercontent.com/postgres/postgres/3638289fb57bdabec00deda98ee9624a35f5d66a/src/backend/utils/errcodes.txt","record_count":268,"release":"19beta3","release_date":"2026-08-13","repository":"https://github.com/postgres/postgres.git","sha256":"cadb9e83cde9a8699a7e74448891ca623af8579ccc8e11c7e533fb47cbc42f89","size":33739,"source_format":"errcodes.txt","source_role":"primary_definition","tag":"REL_19_BETA3","url":"https://github.com/postgres/postgres/blob/3638289fb57bdabec00deda98ee9624a35f5d66a/src/backend/utils/errcodes.txt","version":"19beta3"}],"sqlstate":"28P01","status":"active","usage_evidence":[{"evidence_ids":["postgresql:REL9_0_0:src/include/utils/errcodes.h","postgresql:REL9_0_10:src/include/utils/errcodes.h","postgresql:REL9_0_11:src/include/utils/errcodes.h","postgresql:REL9_0_12:src/include/utils/errcodes.h","postgresql:REL9_0_13:src/include/utils/errcodes.h","postgresql:REL9_0_14:src/include/utils/errcodes.h","postgresql:REL9_0_15:src/include/utils/errcodes.h","postgresql:REL9_0_16:src/include/utils/errcodes.h","postgresql:REL9_0_17:src/include/utils/errcodes.h","postgresql:REL9_0_18:src/include/utils/errcodes.h","postgresql:REL9_0_19:src/include/utils/errcodes.h","postgresql:REL9_0_1:src/include/utils/errcodes.h","postgresql:REL9_0_20:src/include/utils/errcodes.h","postgresql:REL9_0_21:src/include/utils/errcodes.h","postgresql:REL9_0_22:src/include/utils/errcodes.h","postgresql:REL9_0_23:src/include/utils/errcodes.h","postgresql:REL9_0_2:src/include/utils/errcodes.h","postgresql:REL9_0_3:src/include/utils/errcodes.h","postgresql:REL9_0_4:src/include/utils/errcodes.h","postgresql:REL9_0_5:src/include/utils/errcodes.h","postgresql:REL9_0_6:src/include/utils/errcodes.h","postgresql:REL9_0_7:src/include/utils/errcodes.h","postgresql:REL9_0_8:src/include/utils/errcodes.h","postgresql:REL9_0_9:src/include/utils/errcodes.h","postgresql:REL9_1_0:src/backend/utils/errcodes.txt","postgresql:REL9_1_10:src/backend/utils/errcodes.txt","postgresql:REL9_1_11:src/backend/utils/errcodes.txt","postgresql:REL9_1_12:src/backend/utils/errcodes.txt","postgresql:REL9_1_13:src/backend/utils/errcodes.txt","postgresql:REL9_1_14:src/backend/utils/errcodes.txt","postgresql:REL9_1_15:src/backend/utils/errcodes.txt","postgresql:REL9_1_16:src/backend/utils/errcodes.txt","postgresql:REL9_1_17:src/backend/utils/errcodes.txt","postgresql:REL9_1_18:src/backend/utils/errcodes.txt","postgresql:REL9_1_19:src/backend/utils/errcodes.txt","postgresql:REL9_1_1:src/backend/utils/errcodes.txt","postgresql:REL9_1_20:src/backend/utils/errcodes.txt","postgresql:REL9_1_21:src/backend/utils/errcodes.txt","postgresql:REL9_1_22:src/backend/utils/errcodes.txt","postgresql:REL9_1_23:src/backend/utils/errcodes.txt","postgresql:REL9_1_24:src/backend/utils/errcodes.txt","postgresql:REL9_1_2:src/backend/utils/errcodes.txt","postgresql:REL9_1_3:src/backend/utils/errcodes.txt","postgresql:REL9_1_4:src/backend/utils/errcodes.txt","postgresql:REL9_1_5:src/backend/utils/errcodes.txt","postgresql:REL9_1_6:src/backend/utils/errcodes.txt","postgresql:REL9_1_7:src/backend/utils/errcodes.txt","postgresql:REL9_1_8:src/backend/utils/errcodes.txt","postgresql:REL9_1_9:src/backend/utils/errcodes.txt","postgresql:REL9_2_0:src/backend/utils/errcodes.txt","postgresql:REL9_2_10:src/backend/utils/errcodes.txt","postgresql:REL9_2_11:src/backend/utils/errcodes.txt","postgresql:REL9_2_12:src/backend/utils/errcodes.txt","postgresql:REL9_2_13:src/backend/utils/errcodes.txt","postgresql:REL9_2_14:src/backend/utils/errcodes.txt","postgresql:REL9_2_15:src/backend/utils/errcodes.txt","postgresql:REL9_2_16:src/backend/utils/errcodes.txt","postgresql:REL9_2_17:src/backend/utils/errcodes.txt","postgresql:REL9_2_18:src/backend/utils/errcodes.txt","postgresql:REL9_2_19:src/backend/utils/errcodes.txt","postgresql:REL9_2_1:src/backend/utils/errcodes.txt","postgresql:REL9_2_20:src/backend/utils/errcodes.txt","postgresql:REL9_2_21:src/backend/utils/errcodes.txt","postgresql:REL9_2_22:src/backend/utils/errcodes.txt","postgresql:REL9_2_23:src/backend/utils/errcodes.txt","postgresql:REL9_2_24:src/backend/utils/errcodes.txt","postgresql:REL9_2_2:src/backend/utils/errcodes.txt","postgresql:REL9_2_3:src/backend/utils/errcodes.txt","postgresql:REL9_2_4:src/backend/utils/errcodes.txt","postgresql:REL9_2_5:src/backend/utils/errcodes.txt","postgresql:REL9_2_6:src/backend/utils/errcodes.txt","postgresql:REL9_2_7:src/backend/utils/errcodes.txt","postgresql:REL9_2_8:src/backend/utils/errcodes.txt","postgresql:REL9_2_9:src/backend/utils/errcodes.txt","postgresql:REL9_3_0:src/backend/utils/errcodes.txt","postgresql:REL9_3_10:src/backend/utils/errcodes.txt","postgresql:REL9_3_11:src/backend/utils/errcodes.txt","postgresql:REL9_3_12:src/backend/utils/errcodes.txt","postgresql:REL9_3_13:src/backend/utils/errcodes.txt","postgresql:REL9_3_14:src/backend/utils/errcodes.txt","postgresql:REL9_3_15:src/backend/utils/errcodes.txt","postgresql:REL9_3_16:src/backend/utils/errcodes.txt","postgresql:REL9_3_17:src/backend/utils/errcodes.txt","postgresql:REL9_3_18:src/backend/utils/errcodes.txt","postgresql:REL9_3_19:src/backend/utils/errcodes.txt","postgresql:REL9_3_1:src/backend/utils/errcodes.txt","postgresql:REL9_3_20:src/backend/utils/errcodes.txt","postgresql:REL9_3_21:src/backend/utils/errcodes.txt","postgresql:REL9_3_22:src/backend/utils/errcodes.txt","postgresql:REL9_3_23:src/backend/utils/errcodes.txt","postgresql:REL9_3_24:src/backend/utils/errcodes.txt","postgresql:REL9_3_25:src/backend/utils/errcodes.txt","postgresql:REL9_3_2:src/backend/utils/errcodes.txt","postgresql:REL9_3_3:src/backend/utils/errcodes.txt","postgresql:REL9_3_4:src/backend/utils/errcodes.txt","postgresql:REL9_3_5:src/backend/utils/errcodes.txt","postgresql:REL9_3_6:src/backend/utils/errcodes.txt","postgresql:REL9_3_7:src/backend/utils/errcodes.txt","postgresql:REL9_3_8:src/backend/utils/errcodes.txt","postgresql:REL9_3_9:src/backend/utils/errcodes.txt","postgresql:REL9_4_0:src/backend/utils/errcodes.txt","postgresql:REL9_4_10:src/backend/utils/errcodes.txt","postgresql:REL9_4_11:src/backend/utils/errcodes.txt","postgresql:REL9_4_12:src/backend/utils/errcodes.txt","postgresql:REL9_4_13:src/backend/utils/errcodes.txt","postgresql:REL9_4_14:src/backend/utils/errcodes.txt","postgresql:REL9_4_15:src/backend/utils/errcodes.txt","postgresql:REL9_4_16:src/backend/utils/errcodes.txt","postgresql:REL9_4_17:src/backend/utils/errcodes.txt","postgresql:REL9_4_18:src/backend/utils/errcodes.txt","postgresql:REL9_4_19:src/backend/utils/errcodes.txt","postgresql:REL9_4_1:src/backend/utils/errcodes.txt","postgresql:REL9_4_20:src/backend/utils/errcodes.txt","postgresql:REL9_4_21:src/backend/utils/errcodes.txt","postgresql:REL9_4_22:src/backend/utils/errcodes.txt","postgresql:REL9_4_23:src/backend/utils/errcodes.txt","postgresql:REL9_4_24:src/backend/utils/errcodes.txt","postgresql:REL9_4_25:src/backend/utils/errcodes.txt","postgresql:REL9_4_26:src/backend/utils/errcodes.txt","postgresql:REL9_4_2:src/backend/utils/errcodes.txt","postgresql:REL9_4_3:src/backend/utils/errcodes.txt","postgresql:REL9_4_4:src/backend/utils/errcodes.txt","postgresql:REL9_4_5:src/backend/utils/errcodes.txt","postgresql:REL9_4_6:src/backend/utils/errcodes.txt","postgresql:REL9_4_7:src/backend/utils/errcodes.txt","postgresql:REL9_4_8:src/backend/utils/errcodes.txt","postgresql:REL9_4_9:src/backend/utils/errcodes.txt","postgresql:REL9_5_0:src/backend/utils/errcodes.txt","postgresql:REL9_5_10:src/backend/utils/errcodes.txt","postgresql:REL9_5_11:src/backend/utils/errcodes.txt","postgresql:REL9_5_12:src/backend/utils/errcodes.txt","postgresql:REL9_5_13:src/backend/utils/errcodes.txt","postgresql:REL9_5_14:src/backend/utils/errcodes.txt","postgresql:REL9_5_15:src/backend/utils/errcodes.txt","postgresql:REL9_5_16:src/backend/utils/errcodes.txt","postgresql:REL9_5_17:src/backend/utils/errcodes.txt","postgresql:REL9_5_18:src/backend/utils/errcodes.txt","postgresql:REL9_5_19:src/backend/utils/errcodes.txt","postgresql:REL9_5_1:src/backend/utils/errcodes.txt","postgresql:REL9_5_20:src/backend/utils/errcodes.txt","postgresql:REL9_5_21:src/backend/utils/errcodes.txt","postgresql:REL9_5_22:src/backend/utils/errcodes.txt","postgresql:REL9_5_23:src/backend/utils/errcodes.txt","postgresql:REL9_5_24:src/backend/utils/errcodes.txt","postgresql:REL9_5_25:src/backend/utils/errcodes.txt","postgresql:REL9_5_2:src/backend/utils/errcodes.txt","postgresql:REL9_5_3:src/backend/utils/errcodes.txt","postgresql:REL9_5_4:src/backend/utils/errcodes.txt","postgresql:REL9_5_5:src/backend/utils/errcodes.txt","postgresql:REL9_5_6:src/backend/utils/errcodes.txt","postgresql:REL9_5_7:src/backend/utils/errcodes.txt","postgresql:REL9_5_8:src/backend/utils/errcodes.txt","postgresql:REL9_5_9:src/backend/utils/errcodes.txt","postgresql:REL9_6_0:src/backend/utils/errcodes.txt","postgresql:REL9_6_10:src/backend/utils/errcodes.txt","postgresql:REL9_6_11:src/backend/utils/errcodes.txt","postgresql:REL9_6_12:src/backend/utils/errcodes.txt","postgresql:REL9_6_13:src/backend/utils/errcodes.txt","postgresql:REL9_6_14:src/backend/utils/errcodes.txt","postgresql:REL9_6_15:src/backend/utils/errcodes.txt","postgresql:REL9_6_16:src/backend/utils/errcodes.txt","postgresql:REL9_6_17:src/backend/utils/errcodes.txt","postgresql:REL9_6_18:src/backend/utils/errcodes.txt","postgresql:REL9_6_19:src/backend/utils/errcodes.txt","postgresql:REL9_6_1:src/backend/utils/errcodes.txt","postgresql:REL9_6_20:src/backend/utils/errcodes.txt","postgresql:REL9_6_21:src/backend/utils/errcodes.txt","postgresql:REL9_6_22:src/backend/utils/errcodes.txt","postgresql:REL9_6_23:src/backend/utils/errcodes.txt","postgresql:REL9_6_24:src/backend/utils/errcodes.txt","postgresql:REL9_6_2:src/backend/utils/errcodes.txt","postgresql:REL9_6_3:src/backend/utils/errcodes.txt","postgresql:REL9_6_4:src/backend/utils/errcodes.txt","postgresql:REL9_6_5:src/backend/utils/errcodes.txt","postgresql:REL9_6_6:src/backend/utils/errcodes.txt","postgresql:REL9_6_7:src/backend/utils/errcodes.txt","postgresql:REL9_6_8:src/backend/utils/errcodes.txt","postgresql:REL9_6_9:src/backend/utils/errcodes.txt","postgresql:REL_10_0:src/backend/utils/errcodes.txt","postgresql:REL_10_10:src/backend/utils/errcodes.txt","postgresql:REL_10_11:src/backend/utils/errcodes.txt","postgresql:REL_10_12:src/backend/utils/errcodes.txt","postgresql:REL_10_13:src/backend/utils/errcodes.txt","postgresql:REL_10_14:src/backend/utils/errcodes.txt","postgresql:REL_10_15:src/backend/utils/errcodes.txt","postgresql:REL_10_16:src/backend/utils/errcodes.txt","postgresql:REL_10_17:src/backend/utils/errcodes.txt","postgresql:REL_10_18:src/backend/utils/errcodes.txt","postgresql:REL_10_19:src/backend/utils/errcodes.txt","postgresql:REL_10_1:src/backend/utils/errcodes.txt","postgresql:REL_10_20:src/backend/utils/errcodes.txt","postgresql:REL_10_21:src/backend/utils/errcodes.txt","postgresql:REL_10_22:src/backend/utils/errcodes.txt","postgresql:REL_10_23:src/backend/utils/errcodes.txt","postgresql:REL_10_2:src/backend/utils/errcodes.txt","postgresql:REL_10_3:src/backend/utils/errcodes.txt","postgresql:REL_10_4:src/backend/utils/errcodes.txt","postgresql:REL_10_5:src/backend/utils/errcodes.txt","postgresql:REL_10_6:src/backend/utils/errcodes.txt","postgresql:REL_10_7:src/backend/utils/errcodes.txt","postgresql:REL_10_8:src/backend/utils/errcodes.txt","postgresql:REL_10_9:src/backend/utils/errcodes.txt","postgresql:REL_11_0:src/backend/utils/errcodes.txt","postgresql:REL_11_10:src/backend/utils/errcodes.txt","postgresql:REL_11_11:src/backend/utils/errcodes.txt","postgresql:REL_11_12:src/backend/utils/errcodes.txt","postgresql:REL_11_13:src/backend/utils/errcodes.txt","postgresql:REL_11_14:src/backend/utils/errcodes.txt","postgresql:REL_11_15:src/backend/utils/errcodes.txt","postgresql:REL_11_16:src/backend/utils/errcodes.txt","postgresql:REL_11_17:src/backend/utils/errcodes.txt","postgresql:REL_11_18:src/backend/utils/errcodes.txt","postgresql:REL_11_19:src/backend/utils/errcodes.txt","postgresql:REL_11_1:src/backend/utils/errcodes.txt","postgresql:REL_11_20:src/backend/utils/errcodes.txt","postgresql:REL_11_21:src/backend/utils/errcodes.txt","postgresql:REL_11_22:src/backend/utils/errcodes.txt","postgresql:REL_11_2:src/backend/utils/errcodes.txt","postgresql:REL_11_3:src/backend/utils/errcodes.txt","postgresql:REL_11_4:src/backend/utils/errcodes.txt","postgresql:REL_11_5:src/backend/utils/errcodes.txt","postgresql:REL_11_6:src/backend/utils/errcodes.txt","postgresql:REL_11_7:src/backend/utils/errcodes.txt","postgresql:REL_11_8:src/backend/utils/errcodes.txt","postgresql:REL_11_9:src/backend/utils/errcodes.txt","postgresql:REL_12_0:src/backend/utils/errcodes.txt","postgresql:REL_12_10:src/backend/utils/errcodes.txt","postgresql:REL_12_11:src/backend/utils/errcodes.txt","postgresql:REL_12_12:src/backend/utils/errcodes.txt","postgresql:REL_12_13:src/backend/utils/errcodes.txt","postgresql:REL_12_14:src/backend/utils/errcodes.txt","postgresql:REL_12_15:src/backend/utils/errcodes.txt","postgresql:REL_12_16:src/backend/utils/errcodes.txt","postgresql:REL_12_17:src/backend/utils/errcodes.txt","postgresql:REL_12_18:src/backend/utils/errcodes.txt","postgresql:REL_12_19:src/backend/utils/errcodes.txt","postgresql:REL_12_1:src/backend/utils/errcodes.txt","postgresql:REL_12_20:src/backend/utils/errcodes.txt","postgresql:REL_12_21:src/backend/utils/errcodes.txt","postgresql:REL_12_22:src/backend/utils/errcodes.txt","postgresql:REL_12_2:src/backend/utils/errcodes.txt","postgresql:REL_12_3:src/backend/utils/errcodes.txt","postgresql:REL_12_4:src/backend/utils/errcodes.txt","postgresql:REL_12_5:src/backend/utils/errcodes.txt","postgresql:REL_12_6:src/backend/utils/errcodes.txt","postgresql:REL_12_7:src/backend/utils/errcodes.txt","postgresql:REL_12_8:src/backend/utils/errcodes.txt","postgresql:REL_12_9:src/backend/utils/errcodes.txt","postgresql:REL_13_0:src/backend/utils/errcodes.txt","postgresql:REL_13_10:src/backend/utils/errcodes.txt","postgresql:REL_13_11:src/backend/utils/errcodes.txt","postgresql:REL_13_12:src/backend/utils/errcodes.txt","postgresql:REL_13_13:src/backend/utils/errcodes.txt","postgresql:REL_13_14:src/backend/utils/errcodes.txt","postgresql:REL_13_15:src/backend/utils/errcodes.txt","postgresql:REL_13_16:src/backend/utils/errcodes.txt","postgresql:REL_13_17:src/backend/utils/errcodes.txt","postgresql:REL_13_18:src/backend/utils/errcodes.txt","postgresql:REL_13_19:src/backend/utils/errcodes.txt","postgresql:REL_13_1:src/backend/utils/errcodes.txt","postgresql:REL_13_20:src/backend/utils/errcodes.txt","postgresql:REL_13_21:src/backend/utils/errcodes.txt","postgresql:REL_13_22:src/backend/utils/errcodes.txt","postgresql:REL_13_23:src/backend/utils/errcodes.txt","postgresql:REL_13_2:src/backend/utils/errcodes.txt","postgresql:REL_13_3:src/backend/utils/errcodes.txt","postgresql:REL_13_4:src/backend/utils/errcodes.txt","postgresql:REL_13_5:src/backend/utils/errcodes.txt","postgresql:REL_13_6:src/backend/utils/errcodes.txt","postgresql:REL_13_7:src/backend/utils/errcodes.txt","postgresql:REL_13_8:src/backend/utils/errcodes.txt","postgresql:REL_13_9:src/backend/utils/errcodes.txt","postgresql:REL_14_0:src/backend/utils/errcodes.txt","postgresql:REL_14_10:src/backend/utils/errcodes.txt","postgresql:REL_14_11:src/backend/utils/errcodes.txt","postgresql:REL_14_12:src/backend/utils/errcodes.txt","postgresql:REL_14_13:src/backend/utils/errcodes.txt","postgresql:REL_14_14:src/backend/utils/errcodes.txt","postgresql:REL_14_15:src/backend/utils/errcodes.txt","postgresql:REL_14_16:src/backend/utils/errcodes.txt","postgresql:REL_14_17:src/backend/utils/errcodes.txt","postgresql:REL_14_18:src/backend/utils/errcodes.txt","postgresql:REL_14_19:src/backend/utils/errcodes.txt","postgresql:REL_14_1:src/backend/utils/errcodes.txt","postgresql:REL_14_20:src/backend/utils/errcodes.txt","postgresql:REL_14_21:src/backend/utils/errcodes.txt","postgresql:REL_14_22:src/backend/utils/errcodes.txt","postgresql:REL_14_23:src/backend/utils/errcodes.txt","postgresql:REL_14_24:src/backend/utils/errcodes.txt","postgresql:REL_14_2:src/backend/utils/errcodes.txt","postgresql:REL_14_3:src/backend/utils/errcodes.txt","postgresql:REL_14_4:src/backend/utils/errcodes.txt","postgresql:REL_14_5:src/backend/utils/errcodes.txt","postgresql:REL_14_6:src/backend/utils/errcodes.txt","postgresql:REL_14_7:src/backend/utils/errcodes.txt","postgresql:REL_14_8:src/backend/utils/errcodes.txt","postgresql:REL_14_9:src/backend/utils/errcodes.txt","postgresql:REL_15_0:src/backend/utils/errcodes.txt","postgresql:REL_15_10:src/backend/utils/errcodes.txt","postgresql:REL_15_11:src/backend/utils/errcodes.txt","postgresql:REL_15_12:src/backend/utils/errcodes.txt","postgresql:REL_15_13:src/backend/utils/errcodes.txt","postgresql:REL_15_14:src/backend/utils/errcodes.txt","postgresql:REL_15_15:src/backend/utils/errcodes.txt","postgresql:REL_15_16:src/backend/utils/errcodes.txt","postgresql:REL_15_17:src/backend/utils/errcodes.txt","postgresql:REL_15_18:src/backend/utils/errcodes.txt","postgresql:REL_15_19:src/backend/utils/errcodes.txt","postgresql:REL_15_1:src/backend/utils/errcodes.txt","postgresql:REL_15_2:src/backend/utils/errcodes.txt","postgresql:REL_15_3:src/backend/utils/errcodes.txt","postgresql:REL_15_4:src/backend/utils/errcodes.txt","postgresql:REL_15_5:src/backend/utils/errcodes.txt","postgresql:REL_15_6:src/backend/utils/errcodes.txt","postgresql:REL_15_7:src/backend/utils/errcodes.txt","postgresql:REL_15_8:src/backend/utils/errcodes.txt","postgresql:REL_15_9:src/backend/utils/errcodes.txt","postgresql:REL_16_0:src/backend/utils/errcodes.txt","postgresql:REL_16_10:src/backend/utils/errcodes.txt","postgresql:REL_16_11:src/backend/utils/errcodes.txt","postgresql:REL_16_12:src/backend/utils/errcodes.txt","postgresql:REL_16_13:src/backend/utils/errcodes.txt","postgresql:REL_16_14:src/backend/utils/errcodes.txt","postgresql:REL_16_15:src/backend/utils/errcodes.txt","postgresql:REL_16_1:src/backend/utils/errcodes.txt","postgresql:REL_16_2:src/backend/utils/errcodes.txt","postgresql:REL_16_3:src/backend/utils/errcodes.txt","postgresql:REL_16_4:src/backend/utils/errcodes.txt","postgresql:REL_16_5:src/backend/utils/errcodes.txt","postgresql:REL_16_6:src/backend/utils/errcodes.txt","postgresql:REL_16_7:src/backend/utils/errcodes.txt","postgresql:REL_16_8:src/backend/utils/errcodes.txt","postgresql:REL_16_9:src/backend/utils/errcodes.txt","postgresql:REL_17_0:src/backend/utils/errcodes.txt","postgresql:REL_17_10:src/backend/utils/errcodes.txt","postgresql:REL_17_11:src/backend/utils/errcodes.txt","postgresql:REL_17_1:src/backend/utils/errcodes.txt","postgresql:REL_17_2:src/backend/utils/errcodes.txt","postgresql:REL_17_3:src/backend/utils/errcodes.txt","postgresql:REL_17_4:src/backend/utils/errcodes.txt","postgresql:REL_17_5:src/backend/utils/errcodes.txt","postgresql:REL_17_6:src/backend/utils/errcodes.txt","postgresql:REL_17_7:src/backend/utils/errcodes.txt","postgresql:REL_17_8:src/backend/utils/errcodes.txt","postgresql:REL_17_9:src/backend/utils/errcodes.txt","postgresql:REL_18_0:src/backend/utils/errcodes.txt","postgresql:REL_18_1:src/backend/utils/errcodes.txt","postgresql:REL_18_2:src/backend/utils/errcodes.txt","postgresql:REL_18_3:src/backend/utils/errcodes.txt","postgresql:REL_18_4:src/backend/utils/errcodes.txt","postgresql:REL_18_6:src/backend/utils/errcodes.txt","postgresql:REL_19_BETA3:src/backend/utils/errcodes.txt"],"notes":"Presence in a PostgreSQL release definition file is established; runtime throw/use scanning is maintained separately.","scope":"release-definition-catalogue","status":"definition_only"},{"evidence_ids":[],"notes":"No occurrence was found in the locked 7.4..8.4 definition files; 7.0..7.3 source gaps remain explicit.","scope":"pre9-definition-history","status":"unknown"}]},"Evidence":[{"Kind":"cases","Ordinal":0,"ID":"wrong_password_authentication","ServerVersion":null,"Status":null,"Payload":{"assertions":["The connection attempt receives SQLSTATE 28P01","The server does not open a transaction for the rejected connection","The known password opens a new session while the temporary rule is active","A fresh management connection succeeds after the original configuration is restored"],"case_id":"wrong_password_authentication","cleanup":"Restore pg_hba.conf and drop the role and schema.","has_snippet":true,"position":0,"preconditions":["A disposable login role with a known password","A temporary first pg_hba.conf rule uses md5 and is reloaded"],"repair":"Use the intended secret and authentication method, verify a new connection, then restore or rotate credentials without logging passwords.","trigger":"Connect with a wrong password and retain the server's authentication diagnostic.","versions":["10","18"]}},{"Kind":"claims","Ordinal":0,"ID":"identity.class-and-condition","ServerVersion":null,"Status":null,"Payload":{"claim_id":"identity.class-and-condition","limits":"Directory identity does not identify the selected authentication method or the matched HBA rule.","method":"Read the Class 28 section and 28P01 row in the frozen errcodes.txt snapshot.","position":0,"runtime":[],"sources":["src.errcodes.18.6"],"statement":"28P01 is the invalid_password condition in Class 28 invalid_authorization_specification."}},{"Kind":"claims","Ordinal":1,"ID":"mechanism.auth-failure","ServerVersion":null,"Status":null,"Payload":{"claim_id":"mechanism.auth-failure","limits":"Other authentication methods and HBA configuration errors use separate branches and can report different SQLSTATEs or messages.","method":"Trace auth_failed's password/MD5/SCRAM error selection and detail construction and compare the official HBA and password-authentication rules.","position":1,"runtime":[],"sources":["src.auth.18.6","doc.client-auth.18"],"statement":"The password authentication failure path in auth.c selects ERRCODE_INVALID_PASSWORD, reports password authentication failed for user \"%s\" at FATAL, and may add the matched pg_hba.conf line to log detail."}},{"Kind":"claims","Ordinal":2,"ID":"runtime.driver-collector-boundary","ServerVersion":null,"Status":null,"Payload":{"claim_id":"runtime.driver-collector-boundary","limits":"Driver exposure can vary by client and startup failure; the collector record is the server-side SQLSTATE evidence here.","method":"Compare driver diagnostics and collector SQL state code, severity, message, HBA detail, and source location in both final summaries and raw records.","position":2,"runtime":[],"sources":["doc.protocol.18","runtime.28P01-registry-final-20260909.latest","runtime.28P01-registry-final-20260909.pg10"],"statement":"For the rejected startup connection, psycopg exposed startup text with sqlstate null while the PostgreSQL collector recorded FATAL SQLSTATE 28P01 and the password-failure message on both targets."}},{"Kind":"claims","Ordinal":3,"ID":"runtime.authentication-repair","ServerVersion":null,"Status":null,"Payload":{"claim_id":"runtime.authentication-repair","limits":"The run proves a password failure under the controlled md5 rule; it does not cover certificate, GSSAPI, PAM, LDAP, peer, or HBA syntax failures.","method":"Use an owner connection to set the disposable role password, reload the temporary HBA rule, test wrong and known passwords through new connections, restore and reload the original rule, and assert a fresh owner probe.","position":3,"runtime":[],"sources":["case-manifest.28P01","snippet-registry.28P01.final","runtime.28P01-registry-final-20260909.latest","runtime.28P01-registry-final-20260909.pg10"],"statement":"After enabling the temporary md5 rule, the known password opened a new role connection and returned SELECT 1 = 1; after exact HBA restoration, a fresh management connection also returned 1 on both targets."}},{"Kind":"claims","Ordinal":4,"ID":"versions.catalogue-boundary","ServerVersion":null,"Status":null,"Payload":{"claim_id":"versions.catalogue-boundary","limits":"The first scanned release is a lower bound, not an asserted introduction version.","method":"Read the manifest snapshots and definition references for the code.","position":4,"runtime":[],"sources":["manifest.28P01"],"statement":"The locked catalogue records 28P01 in every listed formal snapshot from 9.0.23 through 18.6 and in 19beta3; pre-9.0 history is not scanned."}},{"Kind":"messages","Ordinal":0,"ID":"message.password-failure","ServerVersion":null,"Status":null,"Payload":{"limits":"The fixed PG18.6 source passes logdetail through errdetail_log; a client ErrorResponse need not expose it. PG10 collector output uses a release-specific pg_hba.conf wording and may include an additional password-mismatch line.","message_id":"message.password-failure","path":"","position":0,"raw":{"detail_template":"Connection matched file \"%s\" line %d: \"%s\"","detail_type":"collector log detail assembled at runtime","id":"message.password-failure","limits":"The fixed PG18.6 source passes logdetail through errdetail_log; a client ErrorResponse need not expose it. PG10 collector output uses a release-specific pg_hba.conf wording and may include an additional password-mismatch line.","primary_template":"password authentication failed for user \"%s\"","severity_source":"explicit FATAL","sources":["src.auth.18.6"],"sqlstate":"28P01"},"severity":"explicit FATAL","sources":["src.auth.18.6"],"templates":[{"kind":"primary","literal":"password authentication failed for user \" \"","position":0,"role":"","template":"password authentication failed for user \"%s\""},{"kind":"detail","literal":"Connection matched file \" \" line : \" \"","position":1,"role":"","template":"Connection matched file \"%s\" line %d: \"%s\""}]}},{"Kind":"runtimes","Ordinal":0,"ID":"runtime.28P01-registry-final-20260909.latest","ServerVersion":"18.6 (Homebrew)","Status":"passed","Payload":{"cases":["wrong_password_authentication"],"limits":"","position":0,"raw":{"cases":["wrong_password_authentication"],"id":"runtime.28P01-registry-final-20260909.latest","observed":{"collector_detail":"Connection matched file \"\u003cpg_hba.conf path\u003e\" line 1: \"host all all 0.0.0.0/0 md5\"","collector_message":"password authentication failed for user \u003cgenerated-role\u003e","collector_severity":"FATAL","collector_source":"auth.c:320","collector_sqlstate":"28P01","driver_sqlstate":null,"driver_text":"FATAL: password authentication failed for user \u003cgenerated-role\u003e","hba_reload":{"enabled":true,"restored":true},"known_password_probe":1,"restored_management_probe":1,"transaction":"none opened for rejected startup"},"raw":"verify/results/28P01-registry-final-20260909/latest/raw.jsonl","raw_sha256":"97bcf605a806511aff3f0f4eeaa3615c159bf54e7d6f35b7bfbb45940d3d86d2","run_id":"28P01-registry-final-20260909","server_version":"18.6 (Homebrew)","server_version_num":180006,"snippet_registry":{"path":"verify/cases/28P01/snippets.json","sha256":"9b2ca3d14cb093415043cb1cb8291eee2020df052f8067c4952ce2cd4597d395"},"status":"passed","summary":"verify/results/28P01-registry-final-20260909/latest/summary.json","summary_sha256":"0f58bf277fdd33be8d39ed8f05dc6de5555b8aa89db344b1a4cdfb3eb425bcbf","target":"latest"},"run_id":"28P01-registry-final-20260909","runtime_id":"runtime.28P01-registry-final-20260909.latest","server_version":"18.6 (Homebrew)","status":"passed","target":"latest"}},{"Kind":"runtimes","Ordinal":1,"ID":"runtime.28P01-registry-final-20260909.pg10","ServerVersion":"10.21 (Debian 10.21-1.pgdg90+1)","Status":"passed","Payload":{"cases":["wrong_password_authentication"],"limits":"","position":1,"raw":{"cases":["wrong_password_authentication"],"id":"runtime.28P01-registry-final-20260909.pg10","image":"postgres@sha256:b2baf8998630663d21370da06387c950e587071bdd307ee34e661cdcc7442bcc","observed":{"collector_detail":"Password does not match for user \u003cgenerated-role\u003e.\\nConnection matched pg_hba.conf line 1: \"host all all 0.0.0.0/0 md5\"","collector_message":"password authentication failed for user \u003cgenerated-role\u003e","collector_severity":"FATAL","collector_source":"auth.c:329","collector_sqlstate":"28P01","driver_sqlstate":null,"driver_text":"FATAL: password authentication failed for user \u003cgenerated-role\u003e","hba_reload":{"enabled":true,"restored":true},"known_password_probe":1,"restored_management_probe":1,"transaction":"none opened for rejected startup"},"raw":"verify/results/28P01-registry-final-20260909/pg10/raw.jsonl","raw_sha256":"6d67921dfd66d347593d1b5c348cb60402eee0aa8dfc2cb9c2dbba7872caefb8","run_id":"28P01-registry-final-20260909","server_version":"10.21 (Debian 10.21-1.pgdg90+1)","server_version_num":100021,"snippet_registry":{"path":"verify/cases/28P01/snippets.json","sha256":"9b2ca3d14cb093415043cb1cb8291eee2020df052f8067c4952ce2cd4597d395"},"status":"passed","summary":"verify/results/28P01-registry-final-20260909/pg10/summary.json","summary_sha256":"c8b82b3c42519fe121d27a815f224a25a12b8d14fdffd111dedd23f7a8a0a334","target":"pg10"},"run_id":"28P01-registry-final-20260909","runtime_id":"runtime.28P01-registry-final-20260909.pg10","server_version":"10.21 (Debian 10.21-1.pgdg90+1)","status":"passed","target":"pg10"}},{"Kind":"sources","Ordinal":0,"ID":"src.errcodes.18.6","ServerVersion":null,"Status":null,"Payload":{"commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","docs_url":"","kind":"","location":"lines 271-278","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"}},{"Kind":"sources","Ordinal":1,"ID":"src.auth.18.6","ServerVersion":null,"Status":null,"Payload":{"commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","docs_url":"","kind":"","location":"lines 270-332","path":"src/backend/libpq/auth.c","position":1,"sha256":"94252cb1e2c49b0ddb15f6596d0abf8056c84493de07cc81439da4c5b07018f1","source_id":"src.auth.18.6","tag":"REL_18_6","url":"https://github.com/postgres/postgres/blob/724edf9bde9d356724ad384a2e196edc3c9f80f7/src/backend/libpq/auth.c#L270-L332"}},{"Kind":"sources","Ordinal":2,"ID":"doc.client-auth.18","ServerVersion":null,"Status":null,"Payload":{"commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","docs_url":"","kind":"","location":"pg_hba.conf and password authentication","path":"doc/src/sgml/client-auth.sgml","position":2,"sha256":"3fb31769e212f5ff97ffca769fe4c72c5963b90d0165bd6147f089e310167326","source_id":"doc.client-auth.18","tag":"PG18-docs","url":"https://www.postgresql.org/docs/18/auth-pg-hba-conf.html"}},{"Kind":"sources","Ordinal":3,"ID":"doc.protocol.18","ServerVersion":null,"Status":null,"Payload":{"commit":"724edf9bde9d356724ad384a2e196edc3c9f80f7","docs_url":"","kind":"","location":"ErrorResponse fields","path":"doc/src/sgml/protocol.sgml","position":3,"sha256":"745339e07ebbc2bb67d98b258e25772ada644ef26011e3cd6b3fcbb435235f89","source_id":"doc.protocol.18","tag":"PG18-docs","url":"https://www.postgresql.org/docs/18/protocol-error-fields.html"}},{"Kind":"sources","Ordinal":4,"ID":"manifest.28P01","ServerVersion":null,"Status":null,"Payload":{"commit":"","docs_url":"","kind":"local_artifact","location":"snapshots and definition_blobs entries for the 28P01 definition","path":"sources/manifest.lock.json","position":4,"sha256":"1727a275f336988ff96b4f9990a4ca253080f73fc5d316e7def165c8cf3708a8","source_id":"manifest.28P01","tag":"","url":"../sources/manifest.lock.json"}},{"Kind":"sources","Ordinal":5,"ID":"case-manifest.28P01","ServerVersion":null,"Status":null,"Payload":{"commit":"","docs_url":"","kind":"local_artifact","location":"wrong_password_authentication","path":"verify/cases/28P01/cases.json","position":5,"sha256":"f6b0cfcd0752036c7d3368586fb86740b5ef9364da20800554be02e89d44149f","source_id":"case-manifest.28P01","tag":"","url":"../verify/cases/28P01/cases.json"}},{"Kind":"sources","Ordinal":6,"ID":"snippet-registry.28P01.final","ServerVersion":null,"Status":null,"Payload":{"commit":"","docs_url":"","kind":"local_artifact","location":"wrong_password_authentication ordered SQL","path":"verify/cases/28P01/snippets.json","position":6,"sha256":"9b2ca3d14cb093415043cb1cb8291eee2020df052f8067c4952ce2cd4597d395","source_id":"snippet-registry.28P01.final","tag":"","url":"../verify/cases/28P01/snippets.json"}}]}
