Als Teil meines R-Workflows für eines meiner Projekte lade ich Daten aus einer postgreSQL-Tabelle auf einem Remote-Server ein.Machen Sie einen SSH-Tunnel zu einem anderen Computer über R, um auf die postgreSQL-Tabelle zuzugreifen
Mein Code sieht so aus (anonymisierte Anmeldeinformationen).
I zunächst eine SSH-Verbindung zum entfernten Server im Terminal öffnen.
ssh -p Port -L LocalPort:IP:RemotePort servername"
verbinde ich dann an die Postgres-Datenbank in R.
# Load the RPostgreSQL package
library("RPostgreSQL")
# Create a connection
Driver <- dbDriver("PostgreSQL") # Establish database driver
Connection <- dbConnect(Driver, dbname = "DBName", host = "localhost", port = LocalPort, user = "User")
# Download the data
Data<-dbGetQuery(Connection,"SELECT * FROM remote_postgres_table")
Dieser Ansatz funktioniert gut, und ich bin in der Lage, die Daten ohne Probleme herunterladen.
Allerdings möchte ich den ersten Schritt - d. H. Die Erstellung der SSH-Verbindung - in R statt im Terminal machen. Hier ist mein Versuch, dies zu tun, mit begleitendem Fehler. ganz in R
# Open the ssh connection in R
system("ssh -T -p Port -L LocalPort:IP:RemotePort servername")
# Load the RPostgreSQL package
library("RPostgreSQL")
# Create a connection
Driver <- dbDriver("PostgreSQL") # Establish database driver
Connection <- dbConnect(Driver, dbname = "DBName", host = "localhost", port = LocalPort, user = "User")
# Download the data
Data<-dbGetQuery(Connection,"SELECT * FROM remote_postgres_table")
Error in postgresqlExecStatement(conn, statement, ...) :
RS-DBI driver: (could not Retrieve the result : server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
meine Frage Um zu klären, ich diesen gesamten Workflow durchführen möchten (postgreSQL Daten, die eine Verbindung herstellen, laden) ohne Stufen in Terminal.
'system2 ("ssh", c (verwenden "- L8080: localhost: 80", "N", "-T", "otherhost"), wait = FALSE) 'hat für mich auf Linux funktioniert. Funktioniert jedoch nicht unter Windows, wahrscheinlich weil 'fork' nicht vorhanden ist, also könnten Sie etwas im Hintergrund benötigen (zB' parallel' oder ['future'] (https://github.com/HenrikBengtsson/future)) um eine weitere R Sitzung zu starten). Stoppen könnte es mit 'tools :: pskill' funktionieren, nicht getestet. – r2evans
@ r2evans Arbeitete für mich, danke. – Andy