4

我在 Windows 7 64 位下的 R 2.15.2 上使用 RPostgreSQL 0.4 库(在 R 2.15.3 上编译)与 PostgreSQL 接口。当连接到本地主机上的我的 PostgreSQL 数据库时,这工作正常。我正在尝试让我的 R 代码与 Heroku 上的远程 PostgreSQL 数据库一起运行。我可以从我机器上的 psql 命令 shell 连接到 Heroku 的 PostgreSQL 数据库,并且连接没有问题。我收到消息:

psql (9.2.3, server 9.1.9)
WARNING: psql version 9.2, server version 9.1.
         Some psql features might not work.
WARNING: Console code page (437) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)

显然,psql 使用 SSL 进行连接。但是,当我尝试使用 RPostgreSQL 库例程 dbConnect() 进行连接时,使用 dname=、host=、port=、user=、password= 提供完全相同的凭据时,连接失败并出现以下问题:

Error in postgresqlNewConnection(drv, ...) :
  RS-DBI driver: (could not connect <user>@<hostname> on dbname <dbname>)
Calls: source ... .valueClassTest -> is -> is -> postgresqlNewConnection -> .Call
Execution halted

我知道如果您想远程访问 Heroku 的数据库,Heroku 坚持使用 SSL 连接,因此 R 接口例程 dbConnect() 似乎没有尝试使用 SSL。我还能做些什么来让 Heroku 上从 R 到 PostgreSQL 的远程连接正常工作吗?

4

4 回答 4

3

要获取 heroku 实例的 JDBC URL:

  1. 使用 [pg:credentials] 获取您的主机名、用户名和密码。
  2. 您的 jdbc URL 将是: jdbc:postgresql://[hostname]/[database]?user=[user]&password=[password]&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
  3. 像往常一样处理 JDBC。
于 2013-05-08T22:02:14.127 回答
2

显然有一种使用 RJDBC 的方法。看:

http://ryepup.unwashedmeme.com/blog/2010/11/17/working-with-r-postgresql-ssl-and-mssql/

于 2013-05-07T06:52:39.420 回答
0

请参阅https://stackoverflow.com/a/38942581上对相关 Q 的回答。使用 RPostgres ( https://github.com/rstats-db/RPostgres ) 而不是 RPostgreSQL 的建议为我解决了同样的问题。

于 2016-08-22T12:13:28.347 回答
0

请注意,为了在外部使用 JDBC 连接到 Heroku 数据库,设置 sslfactory 参数也很重要。希望 Heroku 团队通过它并修改他们的文档。

String dbUri = "jdbc:postgresql://ec2-54-243-202-174.compute-1.amazonaws.com:5432/**xxxxxxx**";
Properties props = new Properties();
props.setProperty("user", "**xxxxx**");
props.setProperty("password", "**xxxxx**");
props.setProperty("ssl", "true");//ssl to be set true
props.setProperty("sslfactory", "org.postgresql.ssl.NonValidatingFactory");// sslfactory to be set as shown above
Connection c=DriverManager.getConnection(dbUri,props);
于 2016-07-31T11:46:12.030 回答