You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:03:25