2017-09-04 56 views
4

RPostgreSQLパッケージを使用してR内からリモートPostgreSQLデータベースに接続しようとしていますが、接続のSSL設定に関連するエラーが表示されています。私はpsqlを使用してコマンドラインから接続できることを確認しているので、接続が有効であり、コンピュータからアクセス可能であることがわかります。 (<MyHost><MyPass>が私の接続のために適切に記入された場所)次られたRに接続するにR RPostgreSQL SSLを使用したリモートPostgresデータベースに接続

私の最初の試み:

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) 

は、私はその後、受信したエラーでした:私はそれがコンパイルされたときのPostgreSQLの私のビルドを提案し、このポスト(Postgres SSLMode Value "require" Invalid When SSL Support Is Not Compiled Using Foreign Data Wrapperが)--with-opensslフラグが含ま持っていないかもしれない見つけましたが、実行中にpg_configがあることを明らかにした

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

この旗は確かに私のビルドに設定されました。 psqlコマンドラインツールを使用したときにSSLを使用してデータベースに接続できたため、これは意味があります。

私のPostgreSQLインストールの恐れがあるかもしれませんが、私は完全に削除しました。私はその後、Rコードの上記スニペットの両方を実行し、ちょうどキックのために、私はまったく同じエラーを受けました。私はこれを期待していませんでしたが、これは、(a)RPostgreSQLパッケージを使用するためにPostgreSQLをローカルにインストールする必要はありませんか、(b)私のコンピュータ上でPostgreSQLを別の場所にインストールしています。 は、--with-opensslフラグが組み込まれています。私はlocate postgresqlをコマンドラインで試してみましたが、別のインストールのように見える何も明白ではありませんでした。いずれにしても、まだR内からリモートのPostgreSQLデータベースに正常に接続できませんでした。

ここでは洞察のためにスタックオーバーフローを調べましたが、同様のユーザーは何らかの理由でリモートサーバーとの接続を確立できません。私はここでキルレルミュラーが維持しているRPostgresパッケージをインストールしようとしましたが(https://github.com/rstats-db/RPostgres)、RパッケージをインストールしてローカルのPostgreSQLインストールを認識することができませんでした。エラーメッセージが表示されました(私はここで何かを見逃しているかもしれません...)。 RPostgresの方がRPostgreSQLよりも運が良かったようですが、このパッケージをインストールできませんでした。

すぐに接続を確立する方法を見つけることができない場合、私は他に何ができなくなってしまい、他の技術に頼らざるを得ません。どんな助けでも大歓迎です。

+0

もう少し情報があります。インストールされた 'RPostgreSQL'パッケージに対して' otool -L RPostgreSQL.so'を実行しました。出力は '/ usr/lib/libpq.5.dylib'を指していました(' otool'はMac版Linuxの 'ldd'ライブラリですバイナリがリンクされています)。これはPostgres.appをインストールしたときの 'libpq'の場所ではありません。これは'/Applications/Postgres.app/Contents/Versions/9.6/lib/libpq.5.dylib'です。 '/ usr/lib'のバージョンはどこから来たのかわかりませんが、SSLサポートでコンパイルされていないようです。これはRPostgreSQLが使用しているものです。 'RPosgreSQL'に他の' libpq.5.dylib'を強制するにはどうすればいいですか? – bmosov01

答えて

2

投稿していただきありがとうございます。あなたは実際にそれを解決するのを手伝ってくれました。コンピュータを再起動し、Appleロゴが画面に表示されるまでコマンド + Rを押したままにしてリカバリモードに

  • 再起動してMac:ここでは、我々はそれをやった方法です。
  • Utilities>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
  • 今、あなたは、DBに接続することができます。
+0

お返事ありがとうございます。 OSが '/ usr/lib/libpq.5.dylib'を削除できるように、' csrutil disable'を使ってMacのシステムインテグリティ保護(SIP)を無効にする必要がありますか?つまり、このファイルを削除した後(または少なくとも私がそれが必要でないと確信するまで名前を変更する)、 'csrutil enable'を実行してSIPを再び有効にすることはできますか? – bmosov01

関連する問題