You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

配置pg_hba.conf后连接Heroku数据库失败,求助解决两类psql错误

排查Heroku PostgreSQL连接问题的解决方案

咱们一步步拆解这两个常见的Heroku PostgreSQL连接错误,逐个解决:

错误1:psql: FATAL: no pg_hba.conf entry for host " . . *. ", user "[user]", database "[database]", SSL off

原因

Heroku的PostgreSQL实例强制要求使用SSL连接,而你执行的psql命令默认没有开启SSL,不符合Heroku的连接规则,因此被拒绝。

解决方案

直接在psql命令中添加SSL强制要求的参数即可,修改后的命令如下:

psql -h [hostname] -U [user] [database] -sslmode=require

如果不想每次输入命令都加参数,也可以在本地的~/.psqlrc文件中添加一行配置,让psql默认开启SSL:

\set sslmode require

错误2:psql: could not connect to server: Connection timed out (0x0000274C/10060) Is the server running on host " . . . " and accepting TCP/IP connections on port 5432?

可能原因&排查步骤

这个错误是典型的网络连通性问题,按以下顺序排查:

  • 确认连接信息准确性:先通过Heroku CLI获取最新的数据库连接凭证,避免使用过期或错误的信息:

    heroku pg:credentials:url
    

    把输出的连接字符串里的hostname、user、数据库名和你命令里的内容对比,确保完全一致。

  • 检查本地防火墙/杀毒软件:本地防火墙或杀毒软件可能拦截了5432端口的出站请求,暂时关闭这类软件后重试连接,看是否恢复正常。

  • 测试端口连通性:用telnet或nc命令测试是否能访问Heroku数据库的5432端口:

    # 使用telnet
    telnet [hostname] 5432
    # 或者使用nc(若已安装)
    nc -zv [hostname] 5432
    

    如果显示无法连通,说明网络层面存在阻碍。

  • 代理网络问题:如果你正在使用代理服务器,尝试关闭代理后重试,或者配置代理规则允许访问Heroku的数据库域名。

  • 确认Heroku数据库状态:登录Heroku控制台,查看你的数据库实例是否处于正常运行状态,有没有被暂停或出现异常。


额外注意事项

Heroku会定期轮换PostgreSQL的数据库凭证,所以不要长期手动保存旧的连接信息,每次连接前用heroku pg:credentials:url获取最新的是最稳妥的方式。另外,本地的pg_hba.conf主要用于控制本地PostgreSQL实例的访问规则,对于远程连接Heroku数据库来说,通常不需要修改这个文件,重点放在SSL参数和网络连通性上即可。

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

火山引擎 最新活动