使用RStudio连接面板连接PostgreSQL数据库

4

我们在工作中使用的是PostgreSQL数据库。每次我想连接它时,我都手动执行以下代码来构建我的连接,这很有效。

    library(RPostgreSQL)
    con <- dbConnect(dbDriver("PostgreSQL"),
                     dbname   = "company_xy",
                     host     = "db.company_xy.de",
                     port     = 5432,
                     user     = rstudioapi::askForPassword("User"),
                     password = rstudioapi::askForPassword("Password!"))

我现在想开始使用连接面板,但尽管我试过多种方法来设置它,但从未使其正常工作。这是我按照 RStudio 文档 中描述的步骤进行的:
1. 单击“新建连接” 2. 选择“PostgreSQL Unicode(x64)” 3. 在参数窗口中,我粘贴了以下代码:
    Driver = "PostgreSQL",
    Server = "db.company_xy.de",
    Database = "company_xy",
    UID = "my_username",
    PWD = "my_password",
    Port = 5432

我经常收到以下错误消息:

失败。:2.99:意外符号1:library(DBI)con <- dbConnect(odbc::odbc(), .connection_string = "Driver={PostgreSQL Unicode(x64)};Driver = "PostgreSQL

我试着去掉括号并使用不同的参数分隔符({},;),但是没有成功。odbc和DBI的驱动程序已经安装。
有人能发现编码错误或者是我的操作有误吗?
1个回答

2
只要您删除双引号和空格,并将逗号替换为分号,它就应该可以正常工作。
因此,您的参数窗口应该如下所示:
Server=db.company_xy.de;
Database=company_xy;
UID=my_username;
PWD=my_password;
Port=5432;

请注意,在选择PostgreSQL Unicode(x64)时,您不需要指定驱动程序,因为您已经选择了它。
实际上,这个参数窗口似乎只是为了构建连接字符串,你可以在下面看到。所以我认为从您的R脚本(或控制台)设置连接更加直接:
library(DBI)
con <- dbConnect(
  odbc::odbc(),
  driver = "PostgreSQL Unicode(x64)",
  Server = "db.company_xy.de",
  Database = "company_xy",
  UID = rstudioapi::askForPassword("User"),
  PWD = rstudioapi::askForPassword("Password!"),
  Port = 5432
)

或者,如果您喜欢连接字符串:
library(DBI)
con <- dbConnect(
  odbc::odbc(), 
  .connection_string = "Driver={PostgreSQL Unicode(x64)};Server=db.company_xy.de;Database=company_xy;UID=my_username;PWD=my_password;Port=5432;"
)

但是这种方法不允许您使用rstudioapi :: askForPassword

在两种情况下,连接将出现在您的“连接”窗格中。

也许在将来,您将不需要使用odbc进行连接: https://community.rstudio.com/t/postgresql-in-connection-tab/1817/4


我尝试了您提供的三种方法,但都没有成功。我在连接面板和控制台中执行代码时,收到以下错误消息:**Error: nanodbc/nanodbc.cpp:950: 08001: FATAL: password authentication failed for user "my_username"**。我尝试将密码写成字符串形式,而不使用rstudioapi::,但是我收到相同的错误消息。我知道密码是正确的,因为使用我帖子中描述的第一种方法可以正常工作。(到目前为止谢谢:)) - Largo Terranova
好的,那是另一个问题。你的密码包含非ASCII字符吗?或者包含这些字符 []{}(),;?*=!@ 之一?因为我找到了这个帖子:http://www.postgresql-archive.org/Problem-with-special-characters-in-password-when-using-SQLDriverConnect-td5755239.html - Scarabee
1
没错,我的密码里有一个 "+" 符号。我按照你提供的链接中的指示走了一遍,并找到了解决办法。在花括号中包围我的密码 {my_password} 就搞定了。现在它正常工作了。太棒了!非常感谢 :) - Largo Terranova

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接