使用Shell脚本创建数据库后,Django REST API角色登录失败求助
解决PostgreSQL角色无法登录导致Django REST API启动报错的问题
你遇到的FATAL: role "admin3" is not permitted to log in错误,核心原因是你创建的PostgreSQL角色缺少登录权限。
问题根源
PostgreSQL中,CREATE ROLE命令默认是不带LOGIN属性的——这个属性是角色用来登录数据库的必要条件。你的脚本里用CREATE ROLE创建了admin3角色,但没有显式添加LOGIN权限,所以Django尝试用这个角色连接数据库时会被拒绝。
解决方案
你可以通过两种方式修复:
1. 修改脚本中的角色创建命令
把原来的角色创建语句:
psql -c "CREATE ROLE $projectAdmin WITH SUPERUSER PASSWORD '$projectPassword';"
替换成下面任意一种:
- 显式添加
LOGIN属性:psql -c "CREATE ROLE $projectAdmin WITH LOGIN SUPERUSER PASSWORD '$projectPassword';" - 或者直接用
CREATE USER命令(它默认包含LOGIN属性,和带LOGIN的CREATE ROLE等价):psql -c "CREATE USER $projectAdmin WITH SUPERUSER PASSWORD '$projectPassword';"
2. 给已存在的角色添加登录权限
如果已经执行过原脚本创建了admin3角色,不需要删除重建,直接执行这条命令添加权限即可:
psql -c "ALTER ROLE $projectAdmin WITH LOGIN;"
额外检查
执行完修复操作后,记得确认Django项目settings.py中的数据库配置是否正确:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '你的数据库名', 'USER': 'admin3', 'PASSWORD': '你的密码', 'HOST': 'localhost', # 或你的数据库地址 'PORT': '5432', } }
内容的提问来源于stack exchange,提问作者Vcoss
相关产品推荐
相关产品推荐

