我嘗試使用RPostgreSQL
軟件包從R內連接到遠程PostgreSQL數據庫,並且出現與連接的SSL設置有關的錯誤。我已驗證可以使用psql
從命令行進行連接,因此我知道該連接是有效的,並可從我的計算機訪問。R RPostgreSQL使用SSL連接到遠程Postgres數據庫
我在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 [email protected]<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 [email protected]<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安裝,即使嘗試使用R CMD INSTALL
手動指定include和lib路徑作爲結果提示錯誤信息(雖然我可能錯過了某些內容......)。聽起來好像有些用戶的RPostgres
的運氣好於RPostgreSQL
,但是我再次無法安裝這個軟件包。
如果我不知道如何建立連接,我將不得不採取其他技術。任何幫助將不勝感激。
這裏有一些信息。我爲已安裝的'RPostgreSQL'軟件包運行'otool -L RPostgreSQL.so',輸出指向'/ usr/lib/libpq.5.dylib'('otool'是Mac版Linux的'ldd'來查找庫一個二進制鏈接到)。這是* not *從我安裝的Postgres.app的'libpq'的位置,這裏是:'/ Applications/Postgres.app/Contents/Versions/9.6/lib/libpq.5.dylib'。 我不知道'/ usr/lib'中的版本來自哪裏,但似乎沒有編譯SSL支持;這是RPostgreSQL正在使用的。我怎樣才能強制'RPosgreSQL'使用其他'libpq.5.dylib'? – bmosov01