2013-04-06 2 views
4

PostgreSQL에 인터페이스하기 위해 Windows 7 64 비트에서 R 2.15.2의 RPostgreSQL 0.4 라이브러리 (R 2.15.3에서 컴파일 됨)를 사용하고 있습니다. 이것은 로컬 호스트의 PostgreSQL 데이터베이스에 연결할 때 잘 동작합니다. Heroku에서 원격 PostgreSQL 데이터베이스를 사용하여 내 R 코드를 실행하려고합니다. 내 컴퓨터의 psql 명령 셸에서 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을 사용하여 연결합니다.

Error in postgresqlNewConnection(drv, ...) : 
    RS-DBI driver: (could not connect <user>@<hostname> on dbname <dbname>) 
Calls: source ... .valueClassTest -> is -> is -> postgresqlNewConnection -> .Call 
Execution halted 
: 나는 DNAME = 호스트 = 포트를 사용하여 정확히 같은 자격 증명을 제공하지만, RPostgreSQL 라이브러리 루틴 dbConnect()를 사용하여 연결하려고하면 = 사용자 = 암호 = 연결이 불만 실패

Heroku는 자신의 데이터베이스에 원격으로 액세스하려는 경우 SSL 연결을 요구하므로 R 인터페이스 루틴 인 dbConnect()가 SSL을 시도하지 않는 것으로 보입니다. 내가 R에서 PostgreSQL으로 Heroku에서 원격으로 연결되도록 할 수있는 다른 방법이 있습니까?

답변

3

당신에게 Heroku 인스턴스의 JDBC URL을 얻으려면 : [: 자격 증명 페이지]를

  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

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); 
관련 문제