Как установить RODBC на Mac с помощью unixodbc и freetds?

После довольно обширных поисков я заметил, что многим людям трудно найти руководство от начала до конца, которое отвечает на этот вопрос. (По крайней мере, один вопрос отмечает, что решение существует, но предлагаемое решение не обходит тот факт, что по умолчанию RODBC пытается выполнить компиляцию с iODBC, который не включен в Yosemite.) Я только что прошел этот процесс, поэтому решил задокументировать его здесь в надежде, что он будет полезен другим. Я подключаюсь к базе данных SQL Server.


person Justin O Barber    schedule 09.08.2015    source источник
comment
Спасибо, hrbrmstr. Отличный совет. Я только что внес изменения со своего iPhone, но я еще раз проверю их, когда снова сяду за свой ноутбук. Спасибо!   -  person Justin O Barber    schedule 09.08.2015
comment
Можете ли вы включить в свой вопрос некоторые из ошибок/проблем, с которыми столкнулись другие? Это повысит вероятность того, что они найдут этот вопрос, если будут искать.   -  person Joshua Ulrich    schedule 09.08.2015
comment
Не уверен, слышали ли вы, что существует пакет rsqlserver, который отличается от RSQLServer размещен на CRAN. Первый предлагает более собственный драйвер для сервера sql, должен обеспечивать лучшую скорость, чем ODBC или JDBC. Не уверен, что это работает на Mac.   -  person jangorecki    schedule 09.08.2015
comment
Спасибо, Джошуа. Я сделаю это, как только смогу вернуться к своему ноутбуку. Отличная идея.   -  person Justin O Barber    schedule 10.08.2015
comment
Спасибо, Янгорецкий. Я проверил второй вариант, который вы упомянули, но не первый. Я посмотрю, как только у меня будет возможность.   -  person Justin O Barber    schedule 10.08.2015
comment
Связано: Установка ODBC через HomeBrew.   -  person kenorb    schedule 24.10.2017


Ответы (1)


Используя Homebrew в качестве диспетчера пакетов OS X, я могу установить RODBC, выполнив следующие действия (при условии, что я уже установил R).

  1. Установить unixodbc:

    $ brew install unixodbc
    
  2. Установите freetds (заменив /usr/local/Cellar/unixodbc/2.3.2_1 каталогом unixodbc, если необходимо):

    $ brew install --with-tdsver=8.0 --with-msdblib --with-unixodbc=/usr/local/Cellar/unixodbc/2.3.2_1 freetds
    
  3. Настройте установку freetds (ниже приведен минимальный файл конфигурации):

    freetds.conf

    # server specific section
    [global]
    ;       tds version = 8.0
    ;       dump file = /tmp/freetds.log
    ;       debug flags = 0xffff
    ;       timeout = 10
    ;       connect timeout = 10
            text size = 64512
    
    [TESTSQL]
            # insert the actual host below
            host = <xxx.xx.x.xx>
            port = 1433
            tds version = 8.0
    
  4. #P5#
    $ tsql -H `<xxx.xx.x.xx>` -p 1433 -U `<username>` -P `<password>`
    
    <цитата>
    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    1> exit
    
  5. Настройте установку unixodbc (ниже приведен минимальный файл конфигурации):

    $ sudo vim /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbcinst.ini
    

    odbcinst.ini

    [MSSQL]
    Description   = Microsoft SQL Server driver
    Driver        = /usr/local/Cellar/freetds/0.95.18/lib/libtdsodbc.so
    

    (и еще один минимальный установочный файл):

    $ sudo vim /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbc.ini
    

    odbc.ini

    [ODBC Data Sources]
    TESTSQL     = Test database
    
    [TESTSQL]
    Driver      = MSSQL
    Servername  = TESTSQL
    Port        = 1433
    Database    = TMSEPRD
    TDS_Version = 8.0
    
  6. #P8#
    $ isql TESTSQL `<username>` `<password>`
    
    <цитата>
    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+
    SQL> quit
    
  7. Создайте символическую ссылку на файлы в вашем домашнем каталоге:

    $ ln -vs /usr/local/Cellar/freetds/0.95.18/etc/freetds.conf ~/.freetds.conf
    $ ln -vs /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbc.ini ~/.odbc.ini
    $ ln -vs /usr/local/Cellar/unixodbc/2.3.2_1/etc/odbcinst.ini ~/.odbcinst.ini
    
  8. Найдите и измените файл RProfile, добавив к файлу следующие строки кода (заменив /usr/local/include каталогом include, содержащим ваши файлы sql.h и sqlext.h; вторая строка может быть ненужной, если каталог не существует):

    $ vim /Library/Frameworks/R.framework/Versions/3.2/Resources/library/base/R/Rprofile
    Sys.setenv(ODBC_INCLUDE="/usr/local/include")
    Sys.setenv(ODBC_LIBS="/usr/local/lib")
    
  9. Теперь загрузите исходный код пакета RODBC (который вы можете скачать здесь ) в папку «Загрузки».

  10. #P12# <блочная цитата> #P13#

Теперь пакет должен работать:

> library(RODBC)
> myconn <- odbcConnect("TESTSQL", uid="<userid>", pwd="<password>")

Благодаря Джаред Фолкинс и Gabi Huiber за помощь в выяснении того, в каких каталогах R по умолчанию ищет необходимые файлы для RODBC.

person Justin O Barber    schedule 09.08.2015
comment
видите, маки это просто! спасибо за это ... потратил слишком много времени на борьбу с этим. - person SqlACID; 11.01.2017
comment
Я использовал шаги 1-6, чтобы заставить пакет odbc работать с базой данных MSSQL. Обратите внимание, что [имя_сервера] в freetds.conf должно отличаться от [иное_имя_сервера] в odbc.ini! - person Jack Wasey; 25.04.2018