AWS Ubuntu环境下无法连接PostgreSQL,执行makemigrations报错
解决AWS Ubuntu环境下Django连接PostgreSQL被拒绝的问题
你已经做了基础检查,我结合AWS Ubuntu环境的常见坑,给你几个针对性的排查和解决方向:
1. 确认PostgreSQL是否真的在监听本地5432端口
有时候服务显示running,但可能没正确绑定端口。执行以下命令查看端口监听状态:
sudo ss -tulpn | grep postgres
如果输出里没有127.0.0.1:5432或0.0.0.0:5432,说明PostgreSQL没开放本地端口,需要修改配置:
- 编辑PostgreSQL主配置文件(路径根据版本调整,比如Python3.5通常对应PostgreSQL 9.5,路径为
/etc/postgresql/9.5/main/postgresql.conf):sudo nano /etc/postgresql/9.5/main/postgresql.conf - 找到
listen_addresses参数,修改为:listen_addresses = '127.0.0.1' - 重启PostgreSQL服务生效:
sudo systemctl restart postgresql
2. 检查PostgreSQL本地访问权限配置(pg_hba.conf)
PostgreSQL的访问控制列表可能阻止了Django进程的本地连接:
- 切换到postgres用户:
sudo su - postgres - 编辑同目录下的
pg_hba.conf文件:nano /etc/postgresql/9.5/main/pg_hba.conf - 找到本地IPv4连接段,确保存在这条配置(测试阶段可临时用
trust跳过密码验证,后续记得改回md5保障安全):host all all 127.0.0.1/32 md5 - 保存后重启PostgreSQL服务。
3. 检查Ubuntu本地防火墙(ufw)
如果AWS EC2实例开启了ufw防火墙,可能拦截了本地5432端口的连接:
- 查看防火墙状态:
sudo ufw status - 若防火墙处于开启状态,添加本地5432端口的允许规则:
sudo ufw allow in from 127.0.0.1 to any port 5432
4. 验证Django数据库配置的正确性
有时候问题出在Django的配置文件里:
- 打开项目的
settings.py,确认DATABASES配置的关键参数:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '你的数据库名称', 'USER': '数据库用户名', 'PASSWORD': '数据库密码', 'HOST': 'localhost', 'PORT': '5432', } } - 确保
NAME对应的数据库已存在,可通过postgres用户登录后执行\l命令查看数据库列表。
5. 修复psycopg2与PostgreSQL的版本兼容性
Python3.5对应的psycopg2版本可能存在兼容问题,试试换成psycopg2-binary:
pip3 uninstall psycopg2 pip3 install psycopg2-binary
内容的提问来源于stack exchange,提问作者A K Bharath
相关产品推荐
相关产品推荐

