本地连接Heroku Postgres出现ETIMEDOUT超时错误求助
排查方向及解决步骤
检查以太网防火墙/安全软件
大概率是本地以太网环境的防火墙或杀毒软件拦截了5432端口的出站请求。先临时关闭这类软件,测试连接是否恢复。如果能正常连接,就给PostgreSQL的5432端口添加出站白名单,或者把Heroku Postgres的目标IP(3.224.164.189)加入信任列表。验证以太网的网络端口限制
部分公司、校园网络会屏蔽外部数据库端口(比如5432),可以用以下命令测试端口连通性:
Windows:telnet 3.224.164.189 5432
Mac/Linux:nc -zv 3.224.164.189 5432
如果显示无法连接,说明网络层面被限制,要么联系管理员开放端口,要么用Heroku的SSH隧道中转连接——执行heroku ps:exec -a 你的应用名建立隧道,再通过本地localhost转发端口访问数据库。重置本地以太网网络配置
以太网的DNS或路由配置可能出现异常,试试刷新DNS缓存:
Windows:ipconfig /flushdns
Mac:sudo dscacheutil -flushcache
Linux:sudo systemd-resolve --flush-caches
也可以重启路由器,重置以太网连接后再测试。确认Heroku Postgres访问规则
虽然部署在Heroku上能正常连接,但还是可以去Heroku控制台的Postgres插件页面,检查「Settings」里的「IP Access Control」,确认免费层默认的“允许所有IP访问”规则是否被误修改,如有异常调整回默认配置即可。
关键结论
移动网络能正常连接,说明代码、数据库URL、Heroku端配置都没问题,问题完全出在本地以太网的网络环境上,优先排查防火墙拦截和网络端口限制即可。
内容的提问来源于stack exchange,提问作者marsian8

