AWS服务器上Django与PostgreSQL连接失败问题求助
问题描述
我在Amazon AWS测试服务器上搭建基于PostgreSQL的Django环境,操作步骤如下:
- 系统更新与依赖安装:
$ sudo apt update $ sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib - 拉取代码、创建虚拟环境并安装psycopg2:
$ pip install psycopg2 - PostgreSQL配置:
$ sudo -i -u postgres $ psql $ createuser --interactive (super user); $ createdb Filme;
PostgreSQL服务状态正常,版本14的main集群在5432端口运行。项目settings.py中数据库配置如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'Filme', } }
执行$ python3 manage.py migrate时出现错误:
psycopg2.OperationalError: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "ubuntu" does not exist
参照DigitalOcean教程操作后仍遇到同类错误。
解决方案
错误根源是Django默认使用当前系统用户(此处为ubuntu)尝试连接PostgreSQL,但PostgreSQL中未创建该名称的数据库角色。以下两种方式可解决问题:
方式一:创建匹配系统用户的PostgreSQL角色
- 切换到postgres系统用户:
sudo -i -u postgres - 创建
ubuntu角色并赋予超级权限(同时设置密码):
(createuser ubuntu -s -P-s代表超级用户权限,-P会触发密码设置提示) - 退出postgres用户:
exit - 更新Django配置文件
settings.py,补充数据库连接信息:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'Filme', 'USER': 'ubuntu', 'PASSWORD': '你设置的密码', 'HOST': 'localhost', 'PORT': '5432', } } - 重新执行迁移命令:
python3 manage.py migrate
方式二:指定已创建的PostgreSQL超级用户
如果之前通过createuser --interactive创建了其他超级用户(比如myadmin),直接在settings.py中指定该用户信息:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'Filme', 'USER': '你的超级用户名', 'PASSWORD': '该用户的密码', 'HOST': 'localhost', 'PORT': '5432', } }
完成配置后重新执行迁移命令即可。
额外注意事项
- 超级用户权限的数据库角色默认对
Filme数据库拥有读写权限,无需额外配置。 - 执行
pip install和migrate命令前,确保已激活项目对应的Python虚拟环境。
内容的提问来源于stack exchange,提问作者Sagittarius_A
相关产品推荐
相关产品推荐

