使用Node示例通过Heroku Local连接Heroku Postgres失败,求解决方案
解决Heroku Local连接Heroku Postgres的SSL错误问题
这个问题我之前碰到过好几次,本质就是Heroku Postgres对远程连接强制要求SSL,而本地默认没开启SSL导致的。给你几个靠谱的解决办法:
方法一:在代码里强制启用SSL
如果你用的是Node.js的pg模块,直接在连接配置里加上SSL选项就行。比如:
const { Pool } = require('pg'); const pool = new Pool({ connectionString: process.env.DATABASE_URL, ssl: { rejectUnauthorized: false } });
这里设置rejectUnauthorized: false是因为Heroku Postgres的证书有时候在本地环境下会出现验证问题,跳过验证就能正常连接了。如果你的环境能正常验证证书,也可以直接写ssl: true,不过前者兼容性更好。
方法二:修改.env里的DATABASE_URL
不用改代码,直接在你的DATABASE_URL后面加上SSL参数就行。比如原来的URL是:
postgres://username:password@host:port/database_name
改成:
postgres://username:password@host:port/database_name?sslmode=require
这样Heroku Local启动时,程序会自动以SSL模式连接Postgres,绕过pg_hba.conf的限制。
额外检查
- 先确认
.env文件确实被Heroku Local加载了:运行heroku local:env,看看输出里的DATABASE_URL是不是你配置的那个,有没有带上SSL参数(如果用方法二的话)。 - 要是还是不行,重启一下Heroku Local进程,有时候环境变量需要重新加载才生效。
补充一下:Heroku Postgres的服务器端pg_hba.conf配置默认拒绝非SSL的远程连接,所以不管你本地怎么调,必须开启SSL才能连上远程的Heroku数据库,这是核心原因。
内容的提问来源于stack exchange,提问作者Noam
相关产品推荐
相关产品推荐

