Heroku数据库连接属性

meo*_*ww- 42 heroku heroku-postgres

我正在尝试执行一项相对简单的任务:我想连接到Heroku数据库.我已经创建了数据库并且已经从Heroku站点获得了凭据.但是,当我尝试使用除终端'heroku'命令行客户端之外的任何东西连接到此数据库时,我会收到致命错误或无法连接错误.

我试图在Heroku终端应用程序之外连接的两个工具是:Navicat和IntelliJ.

尝试连接数据库时我在Navicat中收到的错误是:

could not connect to server: Host is down
    Is the server running on host "ec2-107-21-112-215.compute-1.amazonaws.com" and accepting
    TCP/IP connections on port 5432?
Run Code Online (Sandbox Code Playgroud)

我的连接设置如下:

连接名称 Heroku开发测试

主机名/ IP地址 ec2-107-21-112-215.compute-1.amazonaws.com

港口 5432

Navicat似乎甚至没有尝试连接到该主机名.

当我尝试使用完整凭据连接IntelliJ时,我收到以下错误:

java.sql.SQLException: FATAL: no pg_hba.conf entry for host "75.168.4.146", user "rphbqggxeokuxl", database "dc008iqk0rq4j5", SSL off
Run Code Online (Sandbox Code Playgroud)

同样,我正在使用Heroku应用程序在访问其网站上的数据库时提供的凭据.

有没有人遇到过这个Heroku连接问题?

Ben*_*uer 62

我也遇到了FATAL: no pg_hba.conf entry for host错误消息的问题.

我通过在JDBC字符串中添加以下内容解决了与Heroku Postgres数据库的连接问题:&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory.

jdbc:postgresql://host:port/database?user=username&password=secret&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
Run Code Online (Sandbox Code Playgroud)

仅当为Postgres数据库启用了SSL(这是默认设置)时,才需要SSL选项.

暗示

如果要检查数据库连接属性,则只需使用Heroku Toolbelt运行以下命令:( heroku pg:info --app your-heroko-appname确保已安装Postgres以在终端中运行此命令)

pg:info命令还会告诉您sslmode设置为require.

为了测试数据库连接,我推荐SQL Power Architect,因为它是我用来检查我的解决方案的工具.


jpm*_*c26 56

Heroku提供此信息以便从外部源连接:

https://devcenter.heroku.com/articles/heroku-postgresql#external-connections-ingress

第二条错误消息表明PostgreSQL未配置为接受您尝试进行的连接.鉴于Heroku提供的信息,一个很好的猜测是你没有连接SSL.尝试在您的连接上启用它.

以下是与Navicat一起使用SSL的说明:http://mirror.navicat.com/manual/online_manual/en/navicat/rv_manual/ClientCert.html.

这可能有助于配置Intellij以使用SSL:https://devcenter.heroku.com/articles/connecting-to-relational-databases-on-heroku-with-java#connecting-to-a-database-remotely .

  • 如果您正在配置来自RubyMine的访问权限,请参阅更多详细信息:http://stackoverflow.com/questions/20807272/configure-rubymine-remote-connection-to-heroku-postgresql (3认同)
  • 以下是为DbVisualizer配置它的方法:http://bartling.blogspot.com/2013/06/connecting-dbvisualizer-to-heroku.html (3认同)
  • 编辑您的连接URL并添加:`sslmode = require`. (2认同)

use*_*261 20

IntelliJ - >数据源和驱动程序

General选项卡下配置主机,数据库和用户详细信息后,切换到Advanced选项卡,并确保已添加以下内容:

  • ssl = true
  • sslfactory = org.postgresql.ssl.NonValidatingFactory

在此输入图像描述


小智 11

想要帮助可能遇到这种情况的其他人.如果您在单独的字段而不是命令行中提供用户名和密码,则需要使用?在数据库名称和ssl = true之间并丢弃第一个&

jdbc:postgresql://host:port/database?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
Run Code Online (Sandbox Code Playgroud)

这是最终允许我使用SQL Power Architect连接到PostgreSQL数据库的命令行


Gle*_*enn 9

对于那些可能正在使用Spring Boot并通过DATABASE_URL环境属性(而不是系统属性)提供配置的用户,可以将后缀添加到属性中:

?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
Run Code Online (Sandbox Code Playgroud)

并通过略微修改配置bean传递:

@Bean
public BasicDataSource dataSource() throws URISyntaxException {

    URI dbUri = new URI(System.getenv("DATABASE_URL"));
    String username = dbUri.getUserInfo().split(":")[0];
    String password = dbUri.getUserInfo().split(":")[1];

    StringBuilder dbUrl = new StringBuilder(128);
    dbUrl.append("jdbc:postgresql://")
            .append(dbUri.getHost()).append(":")
            .append(dbUri.getPort())
            .append(dbUri.getPath());

    String query = dbUri.getQuery();
    if (null != query && !query.isEmpty()) {
        dbUrl.append("?").append(query);
    }

    BasicDataSource basicDataSource = new BasicDataSource();
    basicDataSource.setUrl(dbUrl.toString());
    basicDataSource.setUsername(username);
    basicDataSource.setPassword(password);

    return basicDataSource;
}
Run Code Online (Sandbox Code Playgroud)


tab*_*h89 9

您可以考虑通过Heroku的Web界面或CLI将ENVIRONMENT CONFIG VARIABLE'PGSSLMODE'设置为'require'.

案例:Postgres dB设置为Heroku附加组件并附加到Heroku Dyno上的应用程序.

遗憾的是,Heroku的指令没有提及如何激活SSL,即使默认情况下从标准-0开始的任何dB层都需要它.

在Heroku指令中遵循所有pg-copy或pg-upgrade步骤(首选方法取决于您的Postgres版本); 但是,在退役旧数据库之前(如果相关) - 添加PGSSLMODE环境变量.

这些说明充分涵盖了如何推广新数据库(并因此设置了DATABASE_URL),因此不需要对它们进行任何更改/修改.