Jupyter云笔记本/Google Colab无法连接本地PostgreSQL求助
本地PostgreSQL无法被云笔记本(Colab/Jupyter)连接的解决配置
核心原因
云环境(Google Colab/Jupyter云笔记本)中的localhost指的是云服务器本身,而非你的本地电脑,直接用localhost连接自然会被拒绝。需要完成以下配置让本地PostgreSQL允许外部访问:
1. 修改PostgreSQL的访问控制规则(pg_hba.conf)
- 找到
pg_hba.conf文件路径:- Windows:
C:\Program Files\PostgreSQL\15\data - Linux/macOS:
/var/lib/postgresql/15/main
- Windows:
- 打开文件,添加一行规则(允许所有外部IP通过密码认证访问):
(注:若你的PostgreSQL版本低于14,可将host all all 0.0.0.0/0 scram-sha-256scram-sha-256替换为md5)
2. 修改PostgreSQL监听地址(postgres.conf)
- 打开
postgres.conf文件,找到listen_addresses配置项,修改为:listen_addresses = '*' - 保存文件后,重启本地PostgreSQL服务:
- Windows:服务列表中找到PostgreSQL 15,右键选择“重启”
- Linux:
sudo systemctl restart postgresql - macOS:
brew services restart postgresql@15
3. 开放本地防火墙的5432端口
- Windows:打开「Windows Defender防火墙高级设置」,新建入站规则,允许TCP协议的5432端口
- Linux:执行
sudo ufw allow 5432/tcp,或firewall-cmd --add-port=5432/tcp --permanent && firewall-cmd --reload - macOS:进入「系统设置-网络-防火墙-选项」,添加PostgreSQL应用或手动开放5432端口
4. 配置公网访问(二选一)
方式一:使用本地公网IP
- 搜索“我的公网IP”获取本地电脑的公网IPv4地址
- 修改云笔记本中的连接代码:
hostname = '你的公网IP' # 替换为实际公网IP dbname = 'postgres' usr = 'postgres' pwd = 'mypassword' conn = psycopg2.connect(host=hostname, database=dbname, user=usr, password=pwd) - 若使用小区宽带,需登录路由器后台,配置端口映射,将路由器的5432端口转发到本地电脑的内网IP(如192.168.1.100)
方式二:使用Ngrok端口转发(适合无固定公网IP)
- 下载并启动Ngrok,执行命令:
ngrok tcp 5432 - 复制Ngrok输出的转发地址(例如
0.tcp.ngrok.io:12345),修改连接代码:hostname = '0.tcp.ngrok.io' port = 12345 # 替换为Ngrok给出的端口 dbname = 'postgres' usr = 'postgres' pwd = 'mypassword' conn = psycopg2.connect(host=hostname, port=port, database=dbname, user=usr, password=pwd)
安全提醒
- 公网暴露数据库存在安全风险,使用完毕后建议:恢复
pg_hba.conf的IP限制、关闭防火墙端口、停止端口转发 - 若仅临时使用,优先选择Ngrok方式,无需修改路由器配置
内容的提问来源于stack exchange,提问作者Harsh Hasteer
相关产品推荐
相关产品推荐

