Django本地连接PostgreSQL出现密码认证失败问题求助
解决Django连接PostgreSQL密码认证失败的问题
这种密码认证失败的坑我之前踩过好几次,咱们一步步排查,应该能找到问题所在:
检查PostgreSQL的认证配置文件(pg_hba.conf)
这是最常见的诱因!PostgreSQL的本地连接认证规则全靠这个文件控制。- 定位文件位置:
- Linux系统一般在
/etc/postgresql/<你的PostgreSQL版本>/main/pg_hba.conf - Windows系统通常在PostgreSQL安装目录的
data文件夹下
- Linux系统一般在
- 找到针对
localhost的连接规则,比如类似这样的行:
把host all all 127.0.0.1/32 peerpeer改成md5或者scram-sha-256(PostgreSQL 10+更推荐用scram-sha-256),修改后变成:host all all 127.0.0.1/32 scram-sha-256 - 保存文件后,重启PostgreSQL服务:
- Linux:
sudo systemctl restart postgresql - Windows:打开服务管理器,找到PostgreSQL服务右键重启
- Linux:
- 定位文件位置:
直接用psql测试密码有效性
先排除密码本身的问题,打开终端执行:psql -U admin -d my_local_db -h localhost输入你的密码
mypassword,如果能成功登录数据库,说明密码没问题;如果登录失败,那就是密码设置错了,需要重置:- 切换到PostgreSQL超级用户(比如postgres):
sudo -u postgres psql - 执行重置密码命令:
ALTER USER admin WITH PASSWORD 'mypassword'; - 退出psql:
\q
- 切换到PostgreSQL超级用户(比如postgres):
检查settings.py的配置细节
别小看拼写和格式错误:- 确保
USER是admin,没有大小写失误(PostgreSQL用户名默认不区分大小写,除非创建时用了双引号包裹) - 确保
PASSWORD用的是英文单/双引号,没有多余空格或中文符号 - 如果你的PostgreSQL端口不是默认的5432,记得加上
'PORT': '你的端口号'字段
- 确保
确认PostgreSQL服务正在运行
有时候服务意外停止也会导致类似报错:- Linux:执行
systemctl status postgresql,查看状态是否为active (running) - Windows:打开任务管理器的服务标签,确认PostgreSQL服务处于运行状态
- Linux:执行
再次确认用户权限
虽然你说已经授权,但再补一遍命令确保没遗漏:- 用postgres超级用户登录psql,执行:
GRANT ALL PRIVILEGES ON DATABASE my_local_db TO admin; - 如果已经创建了表,还可以执行:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO admin;
- 用postgres超级用户登录psql,执行:
按照上面的步骤排查一遍,应该能解决密码认证失败的问题啦!
内容的提问来源于stack exchange,提问作者rishi95
相关产品推荐
相关产品推荐

