R RPostgreSQL使用SSL连接到远程Postgres数据库

时间:2017-09-04 05:38:39

标签: r database postgresql ssl rpostgresql

我正在尝试使用RPostgreSQL包从R中连接到远程PostgreSQL数据库,并且我收到的错误似乎与连接的SSL设置有关。我已经验证我可以使用psql从命令行进行连接,因此我知道连接有效且可以从我的计算机访问。

我在R中连接的第一次尝试是以下内容(其中<MyHost><MyPass>已正确填写以供我连接):

library(RPostgreSQL)
pg <- dbDriver( 'PostgreSQL' )
con = dbConnect( pg, host=<MyHost>, dbname='warehouse', 
                 user='warehouse', password=<MyPass>, port=5432 )

我在R收到的错误是:

RS-DBI driver: (could not connect warehouse@<MyHost>.com:5432 on 
dbname "warehouse": FATAL:  no pg_hba.conf entry for host "75.166.243.177", 
user "warehouse", database "warehouse", SSL off

我理解这意味着我需要对我的连接应用SSL加密,因此我尝试了以下操作,这似乎对OP有效:Connect to Postgres via SSL using R

library(RPostgreSQL)
pg <- dbDriver( 'PostgreSQL' )
con = dbConnect( pg, host=<MyHost>, dbname='dbname=warehouse sslmode=require', 
                 user='warehouse', password=<MyPass>, port=5432 )

我收到的错误是:

RS-DBI driver: (could not connect warehouse@<MyHost>:5432 on dbname 
"warehouse": sslmode value "require" invalid when SSL support is not 
compiled in

我发现这篇帖子(Postgres SSLMode Value "require" Invalid When SSL Support Is Not Compiled Using Foreign Data Wrapper)表明我的PostgreSQL构建在编译时可能没有包含--with-openssl标志,但是运行pg_config显示我的构建确实设置了这个标志。这是有道理的,因为当我使用psql命令行工具时,我能够使用SSL连接到数据库。

由于担心我的PostgreSQL安装可能有问题,我完全删除了它。然后我运行了上述两段R代码,只是为了踢,我收到了完全相同的错误。我没想到这一点,但这似乎表明(a)我不需要本地安装PostgreSQL以便使用RPostgreSQL包或(b)我在其他地方有一个混杂的PostgreSQL安装我的计算机包含--with-openssl标志。我在命令行尝试了locate postgresql并没有看到任何明显看起来像单独安装的东西。无论如何,我仍然无法从R中成功连接到远程PostgreSQL数据库。

我在这里搜索Stack Overflow以获得洞察力,似乎有许多类似性质的未解决问题,用户由于某种原因无法与远程服务器建立连接。我试图安装KirillMüller在这里维护的RPostgres包(https://github.com/rstats-db/RPostgres),但是我无法让R包安装来识别我的本地PostgreSQL安装,即使在尝试使用{手动指定include和lib路径之后{1}},因为建议的错误消息(我可能在这里遗漏了一些东西......)。听起来有些用户使用R CMD INSTALL比使用RPostgres更好运,但同样,我无法安装此软件包。

我无法做其他事情,如果我不知道如何建立连接,我将不得不求助于其他技术。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

感谢发帖!你实际上帮助我们解决了它。我们是这样做的:

  • 重新启动计算机并按住 Command + R 重新启动Mac进入恢复模式,直到屏幕上出现Apple徽标。
  • 点击Utilities&gt; Terminal
  • 在“终端”窗口中,键入csrutil disable并按Enter键。
  • 重新启动Mac。
  • 打开终端。
  • 运行sudo rm /usr/lib/libpq.5.dylib
  • 运行sudo ln -s /Applications/Postgres.app/Contents/Versions/9.6/lib/libpq.5‌​.dylib
  • 现在您可以连接到数据库。