Heroku Postgres:“psql:致命:没有主机的 pg_hba.conf 条目”

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 的方法。什么可能导致这种情况,我该如何解决?

Kan*_*n-0 7

该错误基本上表示您正在尝试在不使用 SSL 连接的情况下连接到数据库实例,但服务器设置为拒绝不使用 SSL 连接的连接。

pg_hba.conf文件驻留在服务器中,包含允许的连接的详细信息。在您的情况下,在具有给定详细信息的文件中找不到匹配的记录(在非 ssl 连接下)。

您可以通过强制连接遵循 SSL 协议来解决此问题。正如 Raj 已经提到的,您需要修改连接字符串以包含“sslmode=require”。这是有关相同内容的 heroku 文档。查看文档中的“外部连接”块。


sim*_*bor 7

从外部应用程序连接到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

享受!


Vic*_*gwa 6

添加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)


Tim*_*sey 6

我通过在 Heroku 上将 PGSSLMODE 设置为 require 来解决它。这告诉 Postres 默认使用 SSL。在命令行上,这可以通过以下命令完成。

heroku config:set PGSSLMODE=require
Run Code Online (Sandbox Code Playgroud)

  • 这导致我出现错误“错误:自签名证书”任何想法为什么? (7认同)

ste*_*eel 2

事实证明,诸如heroku pg:bloat使用本地安装的 Postgres 之类的命令和psql底层命令。我重新编译了带有 ssl 支持 ( ) 的 Postgres 安装--with-openssl,一切正常。

  • 当使用 **asdf-vm** 安装 Postgres 时,您可以添加一个文件 `~/.asdf-postgres-configure-options` ,其内容为 `export POSTGRES_EXTRA_CONFIGURE_OPTIONS="--with-openssl"`。这将在“asdf install”期间使用。请参阅[此处](https://github.com/smashedtoatoms/asdf-postgres/pull/17)。 (2认同)