【发布时间】:2021-09-20 05:32:00
【问题描述】:
我正在使用 Mac 并尝试连接到 R Studio 中的远程 Postgres 数据库。
错误
一、报错:Error: nanodbc/nanodbc.cpp:1021: 00000: FATAL: database "db_name" does not exist
采取的步骤
我首先使用自制软件安装了必要的依赖项:
brew install unixodbc
brew install psqlodbc
然后设置我的 .ini 文件以包含以下内容:
odbcinst.ini:
[PostgreSQL Driver]
Driver = /usr/local/lib/psqlodbcw.so
odbc.ini:
[PostgreSQL]
Driver = PostgreSQL Driver
Database = test_db
Servername = localhost
UserName = postgres
Password = password
Port = 5432
在 R 中,运行以下行来检查我的驱动程序是否安装正确,会产生预期的结果:
> odbc::odbcListDrivers()
name attribute value
1 PostgreSQL Driver Driver /usr/local/lib/psqlodbcw.so
然后我尝试连接到数据库(实际名称/主机/密码已更改),然后会产生数据库“不存在”的错误。所有参数都是正确的,所以我不确定发生了什么。会不会是我在服务器端设置的某种防火墙/ssh 保护?任何帮助将不胜感激,我只是一个谦虚的生物学家,在这里有点超出我的深度。
> con <- dbConnect(odbc::odbc(),
+ driver = "PostgreSQL Driver",
+ database = "db_name",
+ uid = "db_user",
+ pwd = "db_pass",
+ host = "123.456.78.910",
+ port = 5432)
Error: nanodbc/nanodbc.cpp:1021: 00000: FATAL: database "db_name" does not exist
【问题讨论】:
-
我相信您得到 "database doesn't exist" 的事实意味着您正在连接到数据库并且可能正在进行一些身份验证,并且数据库
"db_name"不存在或用户"db_user"无权查看/读取/确认其存在。 -
...这意味着如果您可以确认您的
host和port是正确的,那么我建议您与您的DBA 核实。您是否尝试过在 R 之外进行连接,可能是使用psql命令行实用程序? -
@r2evans 方便,我也是 DBA :) 是的,我定期与
psql联系。我正在尝试使用 R 来自动化我通常通过psql执行的大量导入,使用相同的凭据。 -
如果重要的话,我一般不使用
/etc/odbc*文件,我使用config包并直接指定所有这些细节。为此,我注意到您将不同的数据库名称指定为test_db和"db_name",也许这是关键? -
生物学家和 DBA? R 是在与 Postgres 相同的服务器上运行还是远程运行?在安装了 R 的同一台机器上,请在命令行中显示一个
psql以及该数据库、用户、密码、主机、端口,该端口运行 simple query call。
标签: r postgresql odbc