我正在尝试使用 R 从内部连接到远程 PostgreSQL 数据库RPostgreSQL
包,并且我收到似乎与连接的 SSL 设置相关的错误。我已经验证我可以使用命令行进行连接psql
,所以我知道连接是有效的并且可以从我的计算机访问。
我在 R 中的第一次连接尝试如下(其中<MyHost>
and <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:使用 R 通过 SSL 连接到 Postgres
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
我找到了这篇文章(当未使用外部数据包装器编译 SSL 支持时,Postgres SSLMode 值“require”无效)这表明我构建的 PostgreSQL 可能没有--with-openssl
编译时包含了该标志,但运行 pg_config 显示该标志确实在我的构建中设置。这是有道理的,因为当我使用 psql 命令行工具时,我能够使用 SSL 连接到数据库。
由于担心我的 PostgreSQL 安装可能有问题,我完全删除了它。然后我运行了上面的两个 R 代码片段,只是为了好玩,我收到了完全相同的错误。我没想到这一点,但这似乎表明 (a) 我不需要本地安装 PostgreSQL 来使用RPostgreSQL
包或 (b) 我在我的计算机上的其他地方安装了令人困惑的 PostgreSQLnot建造与--with-openssl
包括标志。我努力了locate postgresql
在命令行中,没有看到任何明显的看起来像单独安装的东西。无论如何,我仍然无法从 R 中成功连接到远程 PostgreSQL 数据库。
我在这里搜索了 Stack Overflow 以获得见解,似乎有许多类似性质的未解决问题,即用户由于某种原因无法与远程服务器建立连接。我尝试安装 Kirill Müller 在这里维护的 RPostgres 软件包(https://github.com/rstats-db/RPostgres),但即使在尝试使用手动指定 include 和 lib 路径之后,我也无法让 R 包安装识别我的本地 PostgreSQL 安装R CMD INSTALL
,正如生成的错误消息所建议的那样(不过我可能在这里错过了一些东西......)。听起来有些用户的运气更好RPostgres
比与RPostgreSQL
,但是我再次无法安装这个软件包。
我不知道还能做什么,如果我无法弄清楚如何尽快建立连接,我将不得不求助于其他技术。任何帮助将不胜感激。