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

如何解决Python通过IP连接PostgreSQL时的连接拒绝错误?

解决PostgreSQL远程连接被拒绝的问题

错误分析

你遇到的psycopg2.OperationalError: Connection refused错误,本质是PostgreSQL服务器未接收来自客户端的TCP/IP连接,常见原因包括服务器配置限制、防火墙拦截、服务未启动或地址/端口错误(注意你提供的IP178.56.25.266最后一段为266,超出IP地址0-255的合法范围,先确认IP是否输入错误)。

排查与修复步骤

1. 确认服务器地址与端口有效性

  • 核实目标服务器的实际公网IP,修正可能的输入错误
  • 登录服务器,检查PostgreSQL监听端口与地址:
    sudo netstat -tulpn | grep postgres
    
    正常输出应包含0.0.0.0:5432或:::5432,表示服务器允许接收所有IP的连接请求

2. 修改PostgreSQL配置开放远程连接

登录服务器,修改两个核心配置文件:

  • postgresql.conf:找到listen_addresses参数,修改为:
    listen_addresses = '*'
    
  • pg_hba.conf:在文件末尾添加规则,允许你的客户端IP连接目标数据库:
    host    test     postgres    你的客户端IP/32    scram-sha-256
    # 若需允许所有IP临时测试,可替换为:
    # host    test     postgres    0.0.0.0/0    scram-sha-256
    
    配置完成后重启服务:
    sudo systemctl restart postgresql
    

3. 开放服务器防火墙与云安全组

  • 服务器本地防火墙开放5432端口(以ufw为例):
    sudo ufw allow 5432/tcp
    sudo ufw reload
    
  • 若为云服务器,需在云控制台的安全组规则中添加5432端口的入站允许规则

4. 验证PostgreSQL服务状态

确认服务器上的PostgreSQL服务正常运行:

sudo systemctl status postgresql

若服务未启动,执行启动命令:

sudo systemctl start postgresql

5. 测试客户端网络连通性

在客户端机器上,用telnet或nc测试端口可达性:

telnet 178.56.25.266 5432
# 或使用nc命令
nc -zv 178.56.25.266 5432

若连接失败,说明网络层面存在拦截,回到防火墙/安全组环节排查

6. 修正代码中的参数问题

确认postgres用户密码与服务器配置匹配,补充端口参数(若非默认):

import psycopg2
conn = psycopg2.connect(
    database="test", 
    user='postgres', 
    password='你的实际密码', 
    host='修正后的服务器IP',
    port=5432
)
cursor = conn.cursor()
cursor.execute("select version()")
data = cursor.fetchone()
print("Connection established to: ", data)
conn.close()

内容的提问来源于stack exchange,提问作者check_my_code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:35:29