【问题标题】:How to connect to Postgres using DBI in R?如何在 R 中使用 DBI 连接到 Postgres?
【发布时间】:2021-10-15 08:29:06
【问题描述】:

第一次尝试使用 DBI 连接到 Postgres 以使用 dbplyr

问题:我正在尝试将 dbplyr 与现有的 odbc 连接一起使用,但 dbplyr 似乎没有为了解决这个问题,因此尝试使用 DBI 创建一个新连接,但是这个 dbi 连接给出了一个错误。所以我希望修复 dbi 连接

  1. 当我尝试使用 DBI 复制现有连接时,连接不起作用:

library(odbc)
library(RODBC)

library(DBI)
library(dplyr)
library(dbplyr)
# from: https://stackoverflow.com/questions/59413904/reading-data-from-a-sql-server-in-rstudio-dplyr
# from: /help/library/DBI/html/dbConnect.html
# from: https://github.com/r-dbi/odbc#odbc

dbicon <-  DBI::dbConnect( 
               odbc::odbc(),
               driver = "PostgreSQL Unicode", 
               database = "Postgres_xyz_db", 
               host = "some_xyz.amazonaws.com", 
               port = "5432", 
               uid = "user",
               pwd = "users_password")

# connect with table
tbl_qry <- tbl(dbicon, "mydb_demo.demo_table")

tbl_qry %>% head()

dbConnect 步骤出错:

Error: nanodbc/nanodbc.cpp:1021: 00000: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
 
In addition: Warning message:
In for (i in seq_len(n)) { : closing unused RODBC handle 2

PS: 我在 localhost:8787

上运行它
  1. 我的现有odbc / RODBC连接适用于同一个数据库。

library(odbc)
library(RODBC)

library(dplyr)
library(dbplyr)

现有的工作连接:

## #################################################################
##                         Connection Para
## #################################################################

driver.name <- "PostgreSQL Unicode"
db.name <- "Postgres_xyz_db"
host.name <- "some_xyz.amazonaws.com" 
port <-"5432"
user.name <-"user"
pwd <- "users_password"

## #################################################################
##                      connect to a database
## #################################################################

con.text <- paste("DRIVER=",driver.name,
                  ";Database=",db.name,
                  ";Server=",host.name,
                  ";Port=",port,
                  ";PROTOCOL=TCPIP",
                  ";UID=", user.name,
                  ";PWD=",pwd,sep="")

con1 <- odbcDriverConnect(con.text)

dbplyr 不适用于此连接

# connect with table
tbl_qry <- tbl(con1, "mydb_demo.demo_table")

tbl_qry %>% head() 

(我不是真正的技术人员或数据库管理员或 devops 人,所以如果它看起来充满基本错误,请原谅)。

【问题讨论】:

  • 你使用了"some_xyz.amazonaws.com",然后说你是“在localhost:8787上运行这个”。是哪个?
  • @r2evans:我正在使用Rstudio by ssh tunneling 所以我得到localhost:8787 & 实际主机名类似于sandbox......some ...xyz ...amazon.aws.com。通过使用相同的凭据,我在第二个指针中的 odbc 连接有效。
  • 尝试server="localhost"而不是host="..."odbc 更喜欢 server=,我相信。
  • 对于您的其他错误,请考虑类似tbl(con1, in_schema("mydb_demo", "demo_table"))
  • 是的,这很好用。非常感谢您的帮助。你真是个了不起的家伙!!!

标签: r postgresql dbplyr r-dbi


【解决方案1】:

odbc 连接更喜欢 server= 而不是 host=,因此您的连接尝试应该是

dbicon <-  DBI::dbConnect( 
               odbc::odbc(),
               driver = "PostgreSQL Unicode", 
               database = "Postgres_xyz_db", 
               server = "some_xyz.amazonaws.com", 
               port = "5432", 
               uid = "user",
               pwd = "users_password")

【讨论】:

  • 感谢@r2evans 在这方面帮助我。卡在这上面很长一段时间了!!
  • 顺便说一句,我前段时间问过的相关问题:stackoverflow.com/questions/61825087/…,以及nanodbc 的仍然开放的 FR,这将有助于以编程方式和交互方式告知这一点:github.com/nanodbc/nanodbc/issues/235
  • 是的,谢谢你分享这些链接......虽然我不太了解它,但这对我来说也是一个好的开始:)
猜你喜欢
  • 2019-10-25
  • 2019-06-17
  • 2021-03-09
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
相关资源
最近更新 更多