2017-09-04 4 views
4

Ich versuche, eine Verbindung zu einer Remote-PostgreSQL-Datenbank von R mit dem RPostgreSQL-Paket herzustellen, und ich bekomme Fehler, die mit den SSL-Einstellungen für die Verbindung in Verbindung stehen. Ich habe überprüft, dass ich über die Befehlszeile unter Verwendung psql verbinden kann, so weiß ich, dass die Verbindung gültig ist und von meinem Computer aus zugänglich ist.R RPostgreSQL Verbinden mit Remote-Postgres-Datenbank mit SSL

Mein erster Versuch, in R Anschluss war die folgende (wo <MyHost> und <MyPass> wurden in geeigneter Weise für meine Verbindung ausgefüllt):

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

Der Fehler, den ich in R empfangen wurde:

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 

Ich verstand, dass ich SSL-Verschlüsselung auf meine Verbindung anwenden musste, und so versuchte ich Folgendes, was für das OP hier funktioniert zu haben scheint: 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) 

Der Fehler erhielt ich dann war:

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

ich diesen Beitrag (Postgres SSLMode Value "require" Invalid When SSL Support Is Not Compiled Using Foreign Data Wrapper) gefunden, die meine Build von PostgreSQL vorgeschlagen möglicherweise nicht die mitgelieferte --with-openssl Fahne gehabt haben, wenn es kompiliert wurde, aber laufen pg_config ergab, dass Diese Flagge wurde tatsächlich in meinem Build gesetzt. Dies ist sinnvoll, weil ich mithilfe von SSL eine Verbindung zur Datenbank herstellen konnte, als ich das Befehlszeilenprogramm psql verwendete.

Aus Angst, dass meine PostgreSQL-Installation fehlerhaft sein könnte, habe ich es komplett entfernt. Ich habe dann beide der obigen Snippets von R-Code ausgeführt, nur für Tritte, und ich erhielt genau die gleichen Fehler. Ich habe das nicht erwartet, aber dies scheint darauf hinzudeuten, dass entweder (a) ich keine lokale Installation von PostgreSQL benötige, um das RPostgreSQL Paket zu verwenden oder (b) ich eine Installation von PostgreSQL irgendwo anders auf meinem Computer installiert habe nicht gebaut mit der --with-openssl Flagge enthalten. Ich habe locate postgresql an der Befehlszeile ausprobiert und habe nichts Offensichtliches gesehen, das wie eine separate Installation aussah. In jedem Fall konnte ich noch nicht erfolgreich Verbindung zur Remote-PostgreSQL-Datenbank innerhalb von R.

Ich habe Stack Overflow für Einsicht hier, und es scheint, gibt es eine Reihe von ungelösten Fragen eines ähnlichen Natur, bei der Benutzer aus irgendeinem Grund keine Verbindung mit einem Remote-Server herstellen können. Ich habe versucht, das RPostgres-Paket zu installieren, das Kirill Müller hier unterhält (https://github.com/rstats-db/RPostgres), aber ich konnte die Installation des R-Pakets nicht erkennen, um meine lokale PostgreSQL-Installation zu erkennen, selbst nachdem ich versucht habe, den include- und lib-Pfad manuell mit R CMD INSTALL anzugeben Fehlermeldung vorgeschlagen (ich habe hier vielleicht etwas verpasst ...). Es hört sich an, als hätten einige Benutzer mit RPostgres mehr Glück als mit RPostgreSQL, aber ich konnte dieses Paket nicht installieren.

Ich weiß nicht, was ich sonst tun soll, und werde auf andere Technologien zurückgreifen müssen, wenn ich nicht herausfinden kann, wie ich bald eine Verbindung aufbauen kann. Jede Hilfe würde sehr geschätzt werden.

+0

Hier ist ein bisschen mehr Info. Ich habe 'otool -L RPostgreSQL.so' für mein installiertes' RPostgreSQL'-Paket ausgeführt und die Ausgabe auf '/ usr/lib/libpq.5.dylib' (' otool' ist die Mac-Version von Linux 'ldd', um Bibliotheken zu finden Eine Binärdatei ist verknüpft mit). Dies ist * nicht * der Ort von 'libpq' von meiner Installation von Postgres.app, die hier ist:'/Applications/Postgres.app/Contents/Versions/9.6/lib/libpq.5.dylib'. Ich weiß nicht, woher die Version in '/ usr/lib' stammt, aber es scheint, dass sie nicht mit SSL-Unterstützung kompiliert wurde; Dies ist, was RPostgreSQL verwendet. Wie kann ich 'RPosgreSQL' zwingen, die andere' libpq.5.dylib' zu verwenden? – bmosov01

Antwort

2

Danke für die Veröffentlichung! Sie haben uns tatsächlich geholfen, es zu lösen.Hier ist, wie wir es getan haben:

  • Starten Sie Ihren Mac in Wiederherstellungsmodus, indem Sie den Computer neu und halten Sie Befehl + R, bis das Apple-Logo auf dem Bildschirm erscheint. Klicken Sie auf Utilities>Terminal.
  • Geben Sie im Terminalfenster csrutil disable ein und drücken Sie die Eingabetaste.
  • Starten Sie Ihren Mac neu.
  • Öffnen Sie ein Terminal.
  • Run sudo rm /usr/lib/libpq.5.dylib
  • Run sudo ln -s /Applications/Postgres.app/Contents/Versions/9.6/lib/libpq.5‌​.dylib
  • Jetzt können Sie an die DB verbinden.
+0

Danke für Ihre Antwort. Ist es erforderlich, den Systemintegritätsschutz (SIP) des Mac mit 'csrutil disable' auszuschalten, damit das Betriebssystem'/usr/lib/libpq.5.dylib' entfernt? Das heißt, sobald ich diese Datei entferne (oder zumindest umbenenne, bis ich sicher bin, dass ich sie nicht brauche), kann ich 'csrutil enable' ausführen, um SIP wieder zu aktivieren? – bmosov01