ste*_*eel 6 postgresql heroku heroku-postgres heroku-cli postgres-10
有许多 Heroku CLI Postgres 命令都返回相同的错误。例如:
$ heroku pg:bloat
psql: FATAL: no pg_hba.conf entry for host "...", user "...", database "...", SSL off
Run Code Online (Sandbox Code Playgroud)
这些命令中至少有一个在过去有效,但现在无效。
否则数据库似乎工作正常。我可以通过我的应用程序的接口访问它。
我没有看到在 Heroku Postgres 仪表板中切换 SSL 的方法。什么可能导致这种情况,我该如何解决?
该错误基本上表示您正在尝试在不使用 SSL 连接的情况下连接到数据库实例,但服务器设置为拒绝不使用 SSL 连接的连接。
pg_hba.conf文件驻留在服务器中,包含允许的连接的详细信息。在您的情况下,在具有给定详细信息的文件中找不到匹配的记录(在非 ssl 连接下)。
您可以通过强制连接遵循 SSL 协议来解决此问题。正如 Raj 已经提到的,您需要修改连接字符串以包含“sslmode=require”。这是有关相同内容的 heroku 文档。查看文档中的“外部连接”块。
从外部应用程序连接到Postgres 时出现错误。修复与您使用的语言有关。在Java 中,您需要将?sslmode=require查询字符串链接起来,在NodeJS(我的情况)中,您应该添加rejectUnauthorized: false如下 -
const client = new Client({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
});
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅https://devcenter.heroku.com/articles/heroku-postgresql。
享受!
添加ssl option数据库配置解决了我的这个问题:
如果你使用sequelize作为你的ORM
const config = {
...
production: {
use_env_variable: 'DATABASE_URL',
dialect: 'postgresql',
logging: false,
dialectOptions: {
ssl: { /* <----- Add SSL option */
require: true,
rejectUnauthorized: false
}
},
},
...
}
Run Code Online (Sandbox Code Playgroud)
如果您没有使用任何 ORM:
const pool = new Pool({
connectionString:DATABASE_URL ,
ssl: { /* <----- Add SSL option */
rejectUnauthorized: false,
},
});
Run Code Online (Sandbox Code Playgroud)
我通过在 Heroku 上将 PGSSLMODE 设置为 require 来解决它。这告诉 Postres 默认使用 SSL。在命令行上,这可以通过以下命令完成。
heroku config:set PGSSLMODE=require
Run Code Online (Sandbox Code Playgroud)
事实证明,诸如heroku pg:bloat使用本地安装的 Postgres 之类的命令和psql底层命令。我重新编译了带有 ssl 支持 ( ) 的 Postgres 安装--with-openssl,一切正常。
| 归档时间: |
|
| 查看次数: |
9972 次 |
| 最近记录: |