You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

psycopg2连接PostgreSQL失败:用户xyz密码验证错误求助

问题解决:PostgreSQL密码验证失败(WSL2环境)

问题描述

连接服务器“localhost”(127.0.0.1)端口5432失败,提示FATAL: 用户“xyz”的密码验证失败。多次修改/etc/postgresql/14/main/pg_hba.conf无效,环境为WSL 2 Ubuntu 22.04.4 LTS,使用psycopg2 2.9.9连接,需通过环境变量认证(已从Windows主机导入),用户xyz为超级用户,密码包含特殊字符“-”。

排查与解决步骤

1. 验证环境变量读取正确性

在代码中添加打印语句,确认环境变量中的密码是否完整读取(尤其是特殊字符“-”):

import os
print(os.getenv('DB_PASSWORD'))
  • 若输出异常,检查Windows主机设置环境变量时是否用双引号包裹含特殊字符的密码(如DB_PASSWORD="abc-def"),避免特殊字符被截断或转义。

2. 修正pg_hba.conf认证规则

确保pg_hba.conf中针对127.0.0.1的连接使用正确的密码认证方式:

# 找到对应行,修改为scram-sha-256(PostgreSQL 14默认)或md5
host    all             all             127.0.0.1/32            scram-sha-256

修改后重启PostgreSQL服务:

sudo systemctl restart postgresql

3. 重置用户密码并匹配认证方式

通过本地peer登录PostgreSQL(若允许),重置用户密码以匹配pg_hba.conf的认证哈希方式:

sudo -u postgres psql

执行SQL语句:

-- 重置密码,若pg_hba用scram-sha-256则指定加密方式
ALTER USER xyz WITH PASSWORD '你的密码' ENCRYPTED WITH scram-sha-256;

完成后重启服务。

4. 简化连接参数测试

临时修改代码,直接使用环境变量而非配置文件 fallback,排除配置文件干扰:

params = {
    'dbname': os.getenv('DB_NAME'),
    'user': os.getenv('DB_USER'),
    'password': os.getenv('DB_PASSWORD'),
    'host': os.getenv('DB_HOST'),
    'port': os.getenv('DB_PORT') 
}

测试连接是否成功。

5. 确认PostgreSQL监听配置

检查postgresql.conf中的监听地址设置,确保包含127.0.0.1:

listen_addresses = '*'  # 或明确指定'127.0.0.1,localhost'

修改后需重启服务。


内容的提问来源于stack exchange,提问作者Leonardo Hernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:42:32