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

PostgreSQL连接报错求助:psycopg2.OperationalError连接被拒绝

解决psycopg2.OperationalError: Connection refused的问题

我之前也碰到过一模一样的情况,启动PostgreSQL服务后还是连不上,大概率是配置或者参数匹配的问题,给你几个逐步排查的方向:

1. 确认PostgreSQL真的在监听5432端口

有时候服务启动了,但可能没监听指定的端口。你可以用命令检查:

  • Windows:打开命令提示符,运行 netstat -ano | findstr :5432,看看有没有显示LISTENING状态的进程,PID对应PostgreSQL的进程。
  • Linux/macOS:在终端运行 lsof -i :5432 或者 netstat -tulpn | grep 5432,确认postgres进程在监听这个端口。

如果没看到监听记录,那得检查PostgreSQL的配置文件。

2. 检查postgresql.conf的监听地址设置

找到你的PostgreSQL 9.6.5的配置文件postgresql.conf:

  • Linux通常在 /var/lib/postgresql/9.6/main/postgresql.conf
  • Windows一般在 C:\Program Files\PostgreSQL\9.6\data\postgresql.conf

打开文件,找到listen_addresses这一行,确保它的值是localhost或者*(允许所有地址访问):

listen_addresses = 'localhost'  # 或者用'*'

修改后重启PostgreSQL服务,再检查端口监听情况。

3. 验证pg_hba.conf的访问权限配置

同样在data目录下找到pg_hba.conf文件,检查是否允许本地的postgres用户连接。需要确保有类似这样的行:

host    all             postgres        127.0.0.1/32            md5
host    all             postgres        ::1/128                 md5

这两行允许IPv4和IPv6的localhost地址用postgres用户登录,认证方式是md5(密码验证)。如果没有的话,添加进去,然后重启服务。

4. 确认代码里的连接参数完全正确

  • 先试试用psql命令行连接,验证参数是否有效:
    psql -d app_db -U postgres -h localhost -p 5432
    
    输入密码samet,如果能成功登录,说明参数没问题;如果连不上,就检查:
    • app_db数据库是否真的存在?登录psql后用\l命令查看数据库列表。
    • postgres用户是否存在?用\du查看用户列表。
    • 密码是否正确?可以用ALTER USER postgres PASSWORD 'samet';重置密码试试。
    • 端口是不是5432?有些安装会默认改成其他端口,检查postgresql.conf里的port参数。

5. 检查本地防火墙设置

有时候本地防火墙会挡住5432端口,导致连接被拒绝:

  • Windows:打开“Windows Defender防火墙”,添加允许PostgreSQL程序或者5432端口的入站规则。
  • Linux:用ufw allow 5432(如果用ufw防火墙)或者配置iptables允许端口访问。

如果以上步骤都试过,应该能解决连接问题。你可以先从命令行连接开始排查,确定是PostgreSQL配置的问题还是代码参数的问题,这样更容易定位。

内容的提问来源于stack exchange,提问作者samet yılmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:20:54