使用RPostgreSQL从R上远程连接到Heroku上的PostgreSQL的问题

时间:2013-04-06 16:21:14

标签: r postgresql rpostgresql

我在Windows 7 64位下的R 2.15.2上使用RPostgreSQL 0.4库(在R 2.15.3上编译)来连接到PostgreSQL。这在连接到localhost上的PostgreSQL数据库时工作正常。我正在尝试使用Heroku上的远程PostgreSQL数据库运行我的R代码。我可以从我的机器上的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坚持使用SSL连接,因此R接口例程dbConnect()似乎没有尝试SSL。我还能做些什么来从Heroku上的R到PostgreSQL的远程连接工作吗?

4 个答案:

答案 0 :(得分:3)

获取heroku实例的JDBC URL:

  1. 使用[pg:credentials]获取您的主机名,用户名和密码。
  2. 您的jdbc网址将是: jdbc:postgresql://[hostname]/[database]?user=[user]&password=[password]&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
  3. 按照通常使用JDBC的方式继续进行。

答案 1 :(得分:2)

答案 2 :(得分: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);

答案 3 :(得分:0)

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