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

如何解决Django连接PostgreSQL时的连接拒绝错误?

Django连接PostgreSQL出现Connection Refused的排查方案

你的settings.py数据库配置如下:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "mydatabase",
        "USER": "myuser",
        "PASSWORD": "mypassword",
        "HOST": "localhost",
        "PORT": "5432",
    }
}

执行python manage.py migrate时触发错误:

django.db.utils.OperationalError: could not connect to server: Connection refused

在确认PostgreSQL已运行、凭据正确的前提下,可从以下几个方向排查:

  • PostgreSQL未监听TCP/IP端口
    默认情况下,部分PostgreSQL安装仅监听Unix套接字,不开启TCP/IP监听。需要修改postgresql.conf(路径通常在/var/lib/postgresql/{version}/main/或Windows的PostgreSQL安装目录下),将listen_addresses设置为'localhost'或'*',然后重启PostgreSQL服务。

  • 数据库用户无本地连接权限
    即使用户名密码正确,PostgreSQL的访问控制规则(pg_hba.conf)可能限制了该用户从localhost的连接。打开pg_hba.conf,添加或修改规则:

    host    mydatabase    myuser    127.0.0.1/32    scram-sha-256
    host    mydatabase    myuser    ::1/128         scram-sha-256
    

    保存后执行pg_ctl reload(或重启服务)加载新配置。

  • 端口被占用或防火墙拦截

    • 检查5432端口是否被其他程序占用:执行lsof -i :5432(Linux/macOS)或netstat -ano | findstr :5432(Windows),确认占用进程是否为PostgreSQL。
    • 检查本地防火墙规则,确保允许5432端口的入站连接(针对localhost的TCP连接)。
  • localhost解析问题
    部分环境下localhost会优先解析到IPv6地址::1,但PostgreSQL可能未开启IPv6监听。可以尝试将settings.py中的HOST改为'127.0.0.1',强制使用IPv4连接。

  • PostgreSQL实际端口非默认5432
    如果安装时修改了PostgreSQL的默认端口,需要核对postgresql.conf中的port参数,将settings.py的PORT改为对应值。

内容的提问来源于stack exchange,提问作者M Haseeb Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:12:35