2013-04-06 96 views
4

我在Windows 7 64位下的R 2.15.2上使用RPostgreSQL 0.4庫(在R 2.15.3上編譯)與PostgreSQL接口。當連接到本地主機上的PostgreSQL數據庫時,這工作正常。我試圖讓我的R代碼在Heroku上運行一個遠程PostgreSQL數據庫。我可以從我的機器上的psql命令shell連接到Heroku的PostgreSQL數據庫,並且連接沒有問題。我收到消息:使用RPostgreSQL從R遠程連接到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庫例程數據庫連接(),但是連接,提供準確使用DNAME =,主機=,端口相同的憑證=,USER =,密碼=,連接失敗與投訴:

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。有什麼我可以做的,以獲得從R到Heroku遠程連接到PostgreSQL工作?

回答

3

要獲得JDBC URL地址的Heroku例如:[:憑據PG]

  1. 使用讓您的主機名,用戶名和密碼。
  2. 您的jdbc URL將爲: jdbc:postgresql://[hostname]/[database]?user=[user]&password=[password]&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
  3. 繼續按照正常使用JDBC的方式進行操作。
+0

小心'sslfactory = org.postgresql.ssl.NonValidatingFactory'部分很重要! – delaye 2014-10-20 17:33:12

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);