使用dplyr连接到外部服务器/数据库

时间:2014-11-07 17:27:29

标签: r postgresql dplyr

我尝试使用dplyr'来尝试连接到位于外部服务器中的数据库

src_postgres(dbname = NULL, host = NULL, port = NULL, user = NULL, 
                 password = NULL, ...)

到目前为止,我已经获得了连接数据库所需的所有参数。问题是数据库所在的服务器也需要身份验证(用户名和密码)。

我尝试与?pipe建立连接,但似乎只有在尝试从远程服务器提取文件时才有效。

任何线索?

2 个答案:

答案 0 :(得分:1)

好消息!我一直这样做,并不难:):/ / p>

两个步骤:

1。创建SSH密钥并放入远程服务器

来自https://serverfault.com/posts/241593/edit

在本地计算机上生成ssh密钥:

$ ssh-keygen -t rsa -b 2048

Enter 获取空密码短语导致:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.

将密钥复制到目标服务器

ssh-copy-id id@server

检查这是否适用于ssh 'id@server',并检查文件夹.ssh/authorized_keys以获取ssh密钥。

您应该知道能够使用$ ssh id@server

登录

2。将数据库端口转发到本地计算机

你应该知道能够使用

ssh -fN id@server

主动建立SSH连接并将端口转发到本地主机。 您可能需要将-p参数调整为ssh以选择正确的端口。

成功转发端口后,您应该可以使用本地计算机上的src_postres()来访问远程数据库。

您也可以使用

启动R脚本
system("ssh -fN id@server")

或将命令放在.Rprofile

3。 (可选)

另外,也许您不希望脚本中有idserver地址,例如,如果您要将它们提供给客户端,或者将它们放在github上。< / p>

然后,使用以下内容编辑或创建文件(在本地计算机上).ssh/config

Host my_ssh
User id
Hostname server

然后您可以使用ssh -fN my_ssh

答案 1 :(得分:0)

执行此操作的最佳方法是通过DBI连接,然后使用dplyr的开放连接。例如:

library(DBI)
con <- dbConnect(RPostgres::Postgres())
db_table <- tbl(con, "my_table")
db_table %>%
  group_by(one_var) %>%
  tally()