Django连接PostgreSQL报错求助:未提供密码导致连接失败
解决Django连接PostgreSQL的密码认证错误
针对你遇到的django.db.utils.OperationalError: connection to server on socket "/tmp/.s.PGSQL.5432" failed: fe_sendauth: no password supplied错误,按以下步骤排查解决:
检查Django数据库配置
打开项目根目录下的settings.py,确认DATABASES配置中的PASSWORD字段是否填写正确,要和PostgreSQL对应数据库用户的密码一致:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '你的数据库名称', 'USER': 'PostgreSQL用户名', 'PASSWORD': '对应用户的密码', 'HOST': 'localhost', 'PORT': '5432', } }重启PostgreSQL服务
不管是否是异常关闭导致的问题,先重启服务确保状态正常:- macOS(brew安装):
brew services restart postgresql - Ubuntu/Debian:
sudo systemctl restart postgresql - Windows:打开「服务」面板,找到PostgreSQL服务右键选择「重启」
- macOS(brew安装):
验证PostgreSQL用户认证设置
- 尝试用命令行登录PostgreSQL:
psql -U 你的数据库用户名 -d 你的数据库名,如果需要输入密码才能登录,说明该用户需要密码认证,必须确保Django配置里的密码和这个一致。 - 查看PostgreSQL的
pg_hba.conf配置文件(通常在PostgreSQL安装目录的data文件夹下),找到本地连接(local或host类型)的认证方式,确保是md5或scram-sha-256(需要密码的认证方式),修改后需要重启PostgreSQL服务生效。
- 尝试用命令行登录PostgreSQL:
重置虚拟环境状态
退出当前虚拟环境:deactivate(Windows直接运行该命令),然后重新激活虚拟环境:- macOS/Linux:
source 你的虚拟环境目录/bin/activate - Windows:
你的虚拟环境目录\Scripts\activate
激活后再运行python manage.py runserver测试连接。
- macOS/Linux:
清理无效的socket文件
如果/tmp/.s.PGSQL.5432这个socket文件存在但无法正常连接,可以执行以下操作:- 先停止PostgreSQL服务
- 删除socket文件:
rm /tmp/.s.PGSQL.5432 - 重新启动PostgreSQL服务
内容的提问来源于stack exchange,提问作者Jacopo Roguzzi
相关产品推荐
相关产品推荐

