配置Django与PostgreSQL遇连接认证失败,求排查解决方法
问题场景
已完成PostgreSQL数据库、用户创建及密码设置,通过\l命令可查看到目标数据库,但运行python manage.py runserver启动Django应用时,出现如下错误:
ON PURE START UP
USER TABLE NOT EXIST
connection to server at "localhost" (127.0.0.1), port 5432 failed: could not initiate GSSAPI security context: Unspecified GSS failure. Minor code may provide more information: Server not found in Kerberos database
connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL: Ident authentication failed for user "postgres"
缺失的配置步骤及修复方案
1. 调整PostgreSQL认证策略
PostgreSQL默认对本地连接采用Ident/Peer认证,需改为密码认证:
- 定位
pg_hba.conf配置文件:- Linux路径:
/etc/postgresql/<版本号>/main/pg_hba.conf - Windows路径:
<PostgreSQL安装目录>/data/pg_hba.conf
- Linux路径:
- 找到针对本地连接的配置行,将
ident或peer替换为md5:# 修改前 local all postgres peer host all all 127.0.0.1/32 ident # 修改后 local all postgres md5 host all all 127.0.0.1/32 md5 - 重启PostgreSQL服务使配置生效:
- Linux:
sudo systemctl restart postgresql - Windows:通过服务管理器重启PostgreSQL服务
- Linux:
2. 校验Django数据库配置
检查项目settings.py中的DATABASES配置,确保参数与实际创建的数据库信息一致:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '你的数据库名称', 'USER': '你的数据库用户名', 'PASSWORD': '你的用户密码', 'HOST': 'localhost', 'PORT': '5432', } }
3. 执行Django数据库迁移
报错中的USER TABLE NOT EXIST说明Django尚未创建核心数据表,完成上述配置后执行迁移:
python manage.py makemigrations python manage.py migrate
4. 验证数据库连接可用性
通过psql直接测试用户连接,确认认证正常:
psql -U <你的数据库用户名> -d <你的数据库名称> -h localhost
输入密码后能成功进入数据库交互界面,则连接配置无误。
内容的提问来源于stack exchange,提问作者Mike D Hovhannisyan

