【问题标题】:R and RStudio not detecting installed PostgreSQL (or any other) ODBC driversR 和 RStudio 未检测到已安装的 PostgreSQL(或任何其他)ODBC 驱动程序
【发布时间】:2019-02-18 08:46:59
【问题描述】:

我正在尝试使用 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 连接功能。当我尝试使用 RStudio 创建New Connection 时,对话框窗口仅显示连接到LivySpark 的选项。

按照建议,这是尝试的连接代码:

使用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 驱动程序似乎不起作用?关于我可以在这里尝试的事情有什么建议吗?

【问题讨论】:

  • 感谢您的建议,我更新了我的帖子以添加这些
  • 请输出环境变量LD_LIBRARY_PATH。您需要将 odbc lib 目录设置为:export LD_LIBRARY_PATH=/usr/local/lib.
  • 这可能是/etc 中的权限问题。尝试以 root 或文件夹所有者身份运行 R 并测试 odbc 连接。
  • 好的,非常感谢,看来您是正确的,这是权限问题!我首先尝试了sudo Rscript -e 'odbc::odbcListDrivers()',但它(出于某种未知原因)不起作用,但我只是尝试了cp /etc/odbcinst.ini ~/.odbcinst.ini &amp;&amp; Rscript -e 'odbc::odbcListDrivers(),它显示了两个驱动程序。太棒了。
  • 实际上使用~/.odbcinst.ini 解决了我的问题,表明它确实是您建议的权限问题。我宁愿不碰/etc 权限。如果您想将其作为答案发布,我们很高兴接受您的答案。

标签: r odbc rstudio rodbc rpostgresql


【解决方案1】:

对于其他仍然坚持这个问题的人 - 我花了几个小时试图让 odbc::odbcListDrivers() 命令打印出我知道在我的 Mac 上的驱动程序。

我通常使用 Windows 机器,以前从未遇到过这个问题,所以试图解决这个问题有点超出我的深度。

在 StackOverflow 和 r-dbi/odbc github 的问题部分有几个问题,有各种答案 - 但没有一个对我有用。

我想我会发布一个关于我如何为我的 Mac 解决它的详细答案。

RStudio 提供了有关为 Windows/Mac/Linux 机器设置驱动程序的指南。安装 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 控制台,最后,我可以使用 odbc::odbcListDrivers() 返回值。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多