无法连接到 heroku PostgreSQL 数据库

Posted

技术标签:

【中文标题】无法连接到 heroku PostgreSQL 数据库【英文标题】:Cannot connect to heroku PostgreSQL db 【发布时间】:2014-03-30 17:07:23 【问题描述】:

我将使用一个简单的 java 程序连接到我的 heroku Postgres 数据库。但是如果我尝试连接我会得到一个错误。谁能解释我的问题或可以解决这个问题?

谢谢 :D

代码:

public static void main(String[] args) throws InstantiationException,
        IllegalAccessException, ClassNotFoundException 
    System.out.println("-------- PostgreSQL "
            + "JDBC Connection Testing ------------");
    try 
        Class.forName("org.postgresql.Driver");
     catch (ClassNotFoundException e) 
        System.out.println("Where is your PostgreSQL JDBC Driver? "
                + "Include in your library path!");
        e.printStackTrace();
        return;
    
    System.out.println("PostgreSQL JDBC Driver Registered!");
    Connection connection = null;
    try 
        // ========>     from heroku website
        String url = "jdbc:postgresql://ec2-107-20-214-225.compute-1.amazonaws.com:5432/databasename";
        Properties props = new Properties();
        props.setProperty("user", "someusername");
        props.setProperty("password", "somepassword");
        props.setProperty("ssl", "true");
        connection = DriverManager.getConnection(url, props);
     catch (SQLException e) 

        System.out.println("Connection Failed! Check output console");
        e.printStackTrace();
        return;
    ...

输出:

-------- PostgreSQL JDBC Connection Testing ------------
PostgreSQL JDBC Driver Registered!
Connection Failed! Check output console
org.postgresql.util.PSQLException: The connection attempt failed.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:225)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:138)
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
...
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    ...

【问题讨论】:

见这里:***.com/questions/9386803/… 和这里:***.com/questions/11832361/… 【参考方案1】:

我遇到了同样的问题,但我必须使用 2 个设置才能让它工作:

String url = "jdbc:postgresql://ec2-107-20-214-225.compute-.amazonaws.com:5432/databasename?ssl=true&sslmode=require

ssl=true

sslmode=require

【讨论】:

【参考方案2】:

sslmode添加到数据库url:

字符串网址 = "jdbc:postgresql://ec2-107-20-214-225.compute-.amazonaws.com:5432/databasename?sslmode=require

【讨论】:

我猜只是 ssl 而不是 sslmode。【参考方案3】:

感谢卢卡斯·埃克伦德!

我的网址应该是这样的:

String url = "jdbc:postgresql://ec2-107-20-214-225.compute-1.amazonaws.com:5432/databasename
?user=someusername&password=somepassword
&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory";

【讨论】:

从安全角度来看,通过不验证证书来解决问题并不是很好...... 请参阅jdbc.postgresql.org/documentation/head/ssl-client.html 文档如何正确设置它,包括要验证的证书

以上是关于无法连接到 heroku PostgreSQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 sequelize 从本地节点应用程序连接到 heroku postgresql 数据库

Heroku部署后Django(djongo)无法连接到MondoDB Atlas

连接到 Heroku PostgreSQL 数据库时的身份验证错误

如何在 Heroku for Node 应用程序上设置环境变量并连接到 PostgreSQL 数据库?

如何配置 heroku.yml 以使用 Heroku PostgreSQL 插件?

postgres服务器拒绝连接到heroku