R 和 RStudio 未检测到已安装的 PostgreSQL(或任何其他)ODBC 驱动程序
R and RStudio not detecting installed PostgreSQL (or any other) ODBC drivers
我正在尝试使用 RStudio 中的 R ODBC 驱动程序连接到 PostgreSQL 数据库。出于某种原因,驱动程序未被 R:
检测到
$ Rscript -e 'odbc::odbcListDrivers()'
[1] name attribute value
<0 rows> (or 0-length row.names)
尽管据我所知,它们已正确安装(使用自制软件):
$ brew list
freetds gettext git icu4c libtool openssl pcre2 pkg-config
postgresql psqlodbc readline sqlite sqliteodbc unixodbc
$ odbcinst -j
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /Users/barthf/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
$ cat /etc/odbcinst.ini
[PostgreSQL Driver]
Driver = /usr/local/lib/psqlodbcw.so
[SQLite Driver]
Driver = /usr/local/lib/libsqlite3odbc.dylib
$ ls /usr/local/lib/ | grep odbc.*so$
libsqlite3odbc.so
libtdsodbc.0.so
libtdsodbc.so
psqlodbca.so
psqlodbcw.so
我运行在:
R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: OS X El Capitan 10.11.6
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] DBI_1.0.0 odbc_1.1.6
loaded via a namespace (and not attached):
[1] Rcpp_0.12.18 dbplyr_1.1.0 compiler_3.4.2 pillar_1.2.3 later_0.7.1 plyr_1.8.4
[7] bindr_0.1.1 base64enc_0.1-3 tools_3.4.2 digest_0.6.12 bit_1.1-12 jsonlite_1.5
[13] tibble_1.4.2 nlme_3.1-131 lattice_0.20-35 pkgconfig_2.0.2 rlang_0.2.2 psych_1.7.8
[19] shiny_1.0.5 rstudioapi_0.7 parallel_3.4.2 RPostgreSQL_0.6-2 yaml_2.1.14 bindrcpp_0.2.2
[25] stringr_1.2.0 httr_1.3.1 dplyr_0.7.5 sparklyr_0.8.4 hms_0.4.2 rprojroot_1.2
[31] bit64_0.9-7 grid_3.4.2 tidyselect_0.2.4 glue_1.2.0 R6_2.2.2 foreign_0.8-69
[37] tidyr_0.7.2 reshape2_1.4.2 purrr_0.2.5 blob_1.1.1 magrittr_1.5 backports_1.1.1
[43] promises_1.0.1 htmltools_0.3.6 mnormt_1.5-5 assertthat_0.2.0 mime_0.5 xtable_1.8-2
[49] httpuv_1.4.0 stringi_1.1.5 lazyeval_0.2.1 broom_0.4.2
出于某种我不知道的原因,RPostgreSQL::PostgreSQL()
驱动程序工作正常。但是我想使用 ODBC 驱动程序,这样我就可以使用 RStudio Connections 功能。当我尝试使用 RStudio 创建 New Connection
时,对话框 window 仅显示用于连接到 Livy
和 Spark
的选项。
根据建议,这是尝试的连接代码:
使用ODBC
:
> con <- DBI::dbConnect(odbc::odbc(),
+ driver = "PostgreSQL Driver",
+ database = "postgres",
+ UID = rstudioapi::askForPassword("Database user"),
+ PWD = rstudioapi::askForPassword("Database password"),
+ host = "localhost",
+ port = 5432) ## returns error below
Error: nanodbc/nanodbc.cpp:950: 01000: [unixODBC][Driver Manager]Can't open lib 'PostgreSQL Driver' : file not found
使用RPostgreSQL
:
con <- DBI::dbConnect(RPostgreSQL::PostgreSQL(),
+ dbname = "postgres",
+ user = rstudioapi::askForPassword("Database user"),
+ password = rstudioapi::askForPassword("Database password"),
+ host = "localhost",
+ port = 5432) ## works fine
为什么 R ODBC 驱动程序似乎不起作用?对我可以在这里尝试的事情有什么建议吗?
对于仍然坚持这个问题的其他人 - 我花了几个小时试图让 odbc::odbcListDrivers()
命令打印出我知道在我的 Mac.[=24= 上的驱动程序]
我通常使用 windows machine 并且以前从未遇到过这个问题,所以我无法理解它。
Whosebug 和 r-dbi/odbcgithub 的问题部分有几个问题,答案各不相同 - 但 none 有效对我来说。
我想我会 post 详细回答我如何解决我的 Mac。
RStudio 有一个关于为 Windows/Mac/Linux machines 设置驱动程序的指南。安装 unixODBC 和您的驱动程序(例如 PostgreSQL)后,您需要编辑以下两个文件 odbcinst.ini
(定义驱动程序选项)和 odbc.ini
(定义连接选项)。
在我的 Mac 上,我不知道去哪里找所以我去搜索并在 /Library/ODBC/odbcinst.ini
找到了它。
此文件包含我认为会使用 odbc::odbcListDrivers()
显示的驱动程序信息 - 但事实并非如此。
经过大量谷歌搜索后,我发现在 mac 终端 odbcinst -j
中输入以下命令以(我认为)显示驱动程序的文件位置和数据源名称信息。这显示 odbc.ini 文件的位置在以下路径 /Users/myusername/.odbc.ini
.
注意 .odbc.ini
中的前导点。
圆点表示隐藏文件。键入 SHIFT + CMD + .
以显示它们。
导航到 /Users/myusername
并显示隐藏文件后,我还看到了 .odbcinst.ini
。我在文本编辑器中打开了这个文件,很惊讶,它是空的。
我打开/Library/ODBC/odbcinst.ini
,复制内容粘贴到/Users/myusername/.odbcinst.ini
。
我跳回 R 控制台,最后,我可以 return 使用 odbc::odbcListDrivers()
的值。
我正在尝试使用 RStudio 中的 R ODBC 驱动程序连接到 PostgreSQL 数据库。出于某种原因,驱动程序未被 R:
检测到$ Rscript -e 'odbc::odbcListDrivers()'
[1] name attribute value
<0 rows> (or 0-length row.names)
尽管据我所知,它们已正确安装(使用自制软件):
$ brew list
freetds gettext git icu4c libtool openssl pcre2 pkg-config
postgresql psqlodbc readline sqlite sqliteodbc unixodbc
$ odbcinst -j
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /Users/barthf/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
$ cat /etc/odbcinst.ini
[PostgreSQL Driver]
Driver = /usr/local/lib/psqlodbcw.so
[SQLite Driver]
Driver = /usr/local/lib/libsqlite3odbc.dylib
$ ls /usr/local/lib/ | grep odbc.*so$
libsqlite3odbc.so
libtdsodbc.0.so
libtdsodbc.so
psqlodbca.so
psqlodbcw.so
我运行在:
R version 3.4.2 (2017-09-28)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: OS X El Capitan 10.11.6
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] DBI_1.0.0 odbc_1.1.6
loaded via a namespace (and not attached):
[1] Rcpp_0.12.18 dbplyr_1.1.0 compiler_3.4.2 pillar_1.2.3 later_0.7.1 plyr_1.8.4
[7] bindr_0.1.1 base64enc_0.1-3 tools_3.4.2 digest_0.6.12 bit_1.1-12 jsonlite_1.5
[13] tibble_1.4.2 nlme_3.1-131 lattice_0.20-35 pkgconfig_2.0.2 rlang_0.2.2 psych_1.7.8
[19] shiny_1.0.5 rstudioapi_0.7 parallel_3.4.2 RPostgreSQL_0.6-2 yaml_2.1.14 bindrcpp_0.2.2
[25] stringr_1.2.0 httr_1.3.1 dplyr_0.7.5 sparklyr_0.8.4 hms_0.4.2 rprojroot_1.2
[31] bit64_0.9-7 grid_3.4.2 tidyselect_0.2.4 glue_1.2.0 R6_2.2.2 foreign_0.8-69
[37] tidyr_0.7.2 reshape2_1.4.2 purrr_0.2.5 blob_1.1.1 magrittr_1.5 backports_1.1.1
[43] promises_1.0.1 htmltools_0.3.6 mnormt_1.5-5 assertthat_0.2.0 mime_0.5 xtable_1.8-2
[49] httpuv_1.4.0 stringi_1.1.5 lazyeval_0.2.1 broom_0.4.2
出于某种我不知道的原因,RPostgreSQL::PostgreSQL()
驱动程序工作正常。但是我想使用 ODBC 驱动程序,这样我就可以使用 RStudio Connections 功能。当我尝试使用 RStudio 创建 New Connection
时,对话框 window 仅显示用于连接到 Livy
和 Spark
的选项。
根据建议,这是尝试的连接代码:
使用ODBC
:
> con <- DBI::dbConnect(odbc::odbc(),
+ driver = "PostgreSQL Driver",
+ database = "postgres",
+ UID = rstudioapi::askForPassword("Database user"),
+ PWD = rstudioapi::askForPassword("Database password"),
+ host = "localhost",
+ port = 5432) ## returns error below
Error: nanodbc/nanodbc.cpp:950: 01000: [unixODBC][Driver Manager]Can't open lib 'PostgreSQL Driver' : file not found
使用RPostgreSQL
:
con <- DBI::dbConnect(RPostgreSQL::PostgreSQL(),
+ dbname = "postgres",
+ user = rstudioapi::askForPassword("Database user"),
+ password = rstudioapi::askForPassword("Database password"),
+ host = "localhost",
+ port = 5432) ## works fine
为什么 R ODBC 驱动程序似乎不起作用?对我可以在这里尝试的事情有什么建议吗?
对于仍然坚持这个问题的其他人 - 我花了几个小时试图让 odbc::odbcListDrivers()
命令打印出我知道在我的 Mac.[=24= 上的驱动程序]
我通常使用 windows machine 并且以前从未遇到过这个问题,所以我无法理解它。
Whosebug 和 r-dbi/odbcgithub 的问题部分有几个问题,答案各不相同 - 但 none 有效对我来说。
我想我会 post 详细回答我如何解决我的 Mac。
RStudio 有一个关于为 Windows/Mac/Linux machines 设置驱动程序的指南。安装 unixODBC 和您的驱动程序(例如 PostgreSQL)后,您需要编辑以下两个文件 odbcinst.ini
(定义驱动程序选项)和 odbc.ini
(定义连接选项)。
在我的 Mac 上,我不知道去哪里找所以我去搜索并在 /Library/ODBC/odbcinst.ini
找到了它。
此文件包含我认为会使用 odbc::odbcListDrivers()
显示的驱动程序信息 - 但事实并非如此。
经过大量谷歌搜索后,我发现在 mac 终端 odbcinst -j
中输入以下命令以(我认为)显示驱动程序的文件位置和数据源名称信息。这显示 odbc.ini 文件的位置在以下路径 /Users/myusername/.odbc.ini
.
注意 .odbc.ini
中的前导点。
圆点表示隐藏文件。键入 SHIFT + CMD + .
以显示它们。
导航到 /Users/myusername
并显示隐藏文件后,我还看到了 .odbcinst.ini
。我在文本编辑器中打开了这个文件,很惊讶,它是空的。
我打开/Library/ODBC/odbcinst.ini
,复制内容粘贴到/Users/myusername/.odbcinst.ini
。
我跳回 R 控制台,最后,我可以 return 使用 odbc::odbcListDrivers()
的值。