无法连接到 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 数据库?