Google Colab连接本地PostgreSQL出现psycopg2.OperationalError连接拒绝如何解决?
解决Colab连接本地PostgreSQL失败的问题
核心原因
Google Colab运行在云端虚拟机中,你代码里的localhost指向的是Colab的虚拟机,而非你的Mac本地机器——云端环境无法直接访问本地局域网内的服务,这是导致连接被拒绝的根本原因。另外你之前的postgresql.conf配置中,listen_addresses = '*'前面还带着注释符号#,这行配置实际未生效,也是问题之一。
可行解决方案
方案1:用ngrok做端口转发(推荐)
这是最便捷的临时连接方式,无需修改网络防火墙规则:
- 下载ngrok到你的Mac,解压后在终端运行:
运行后会生成一个公网转发地址,格式类似./ngrok tcp 5432tcp://0.tcp.ngrok.io:12345,记下其中的域名(如0.tcp.ngrok.io)和端口(如12345)。 - 修正Postgres配置:
- 打开
postgresql.conf,把#listen_addresses = '*'的#删掉,保存后重启Postgres服务(通过Postgres.app点击重启)。 - 简化
pg_hba.conf,保留以下规则即可(重复的trust规则可以删除,避免冲突):local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust host all all 0.0.0.0/0 md5
- 打开
- 修改Colab中的连接代码:
from sqlalchemy import create_engine # 替换成ngrok的地址、端口,以及你的用户名、密码、数据库名 engine = create_engine('postgresql://myusrname:mypassword@0.tcp.ngrok.io:12345/mydb') - 运行
%sql $engine.url即可尝试连接。
方案2:使用Colab本地运行时
如果希望Colab直接调用本地环境:
- 在Colab界面右上角点击「连接」→「连接到本地运行时」。
- 按照提示在Mac终端运行对应的Jupyter命令,建立Colab与本地Jupyter服务的连接。
- 连接成功后,Colab的
localhost会指向你的Mac,直接使用原来的连接代码即可。
额外提醒
- 不要直接将本地PostgreSQL暴露到公网(比如直接用公网IP开放端口),存在安全风险,ngrok是临时转发的安全方式。
- 确认Mac系统防火墙没有拦截5432端口的入站连接。
内容的提问来源于stack exchange,提问作者brew6372461
相关产品推荐
相关产品推荐

