RStudioのODBC設定でハマった話


はじめに

RStudio(on Mac)からRDBMSへ接続できるようにするODBCの設定でハマったので、備忘も兼ねて投稿します。

環境

macOS 10.13.6
RStudio 1.1.456

何が起きたのか?

RStudioからODBCドライバでRDBMSに接続する場合、ConnectionsタブのNew Connectionボタンから接続先を選択します。

この時に画面に表示される接続先の一覧は、ODBCの設定ファイル「odbc.ini」「odbcinst.ini」に記述されている内容が表示されます。
ところが、上記設定をしたにもかかわらず、接続先の一覧に接続先が表示されないという事象に遭遇しました。

上記ファイルの設定方法は公式サイト「Setting up ODBC Drivers」にて説明されていますが、「odbc.ini」に接続先情報、「odbcinst.ini」に接続先のドライバ情報を記述の上、/etc/配下に配置することで有効になり、RStudio上に表示されるはずでした。

設定に関する仕様について調

公式ドキュメントとにらめっこをした結果、odbc.ini、odbcinst.iniの設定が参照されていないような挙動であることから、ファイルの配置場所に誤りがあるのではと考えました。
公式ドキュメントには、ファイルの配置場所について次のように説明があります。

LOCATION
The DSN configuration files can be defined globally for all users 
of the system, often at /etc/odbc.ini or /opt/local/etc/odbc.ini. 
The file location depends on what option was used when compiling 
unixODBC; odbcinst -j can be used to find the exact location. 
Alternatively, the ODBCSYSINI environment variable can be used to
specify the location of the configuration files. 
Ex. ODBCSYSINI=~/ODBC

A local DSN file can also be used with the files ~/.odbc.ini and 
~/.odbcinst.ini.

つまり、ファイルの配置場所については下記のいずれかに該当していれば有効になるはずです。

  1. /etc/配下
  2. /opt/local/etc/配下
  3. odbcinst -jコマンドで認識されている場所
  4. 環境変数「ODBCSYSINI」に定めたフォルダ配下
  5. ユーザフォルダ配下に、.odbc.ini、 .odbcinst.iniというファイル名で配置

調査したこと

現環境を理解するために、3.の「odbcinst -j」を実行し、認識されるファイルがどこに配置されているべきかを確認しました。実行結果は下記のとおりです。

odbcinstコマンドの実行結果
$ 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/XXXXX/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

「DRIVERS」、「SYSTEM DATA SOURCES」の結果から、/etc/配下に設置すれば仕様1,3を満たしていることになり、認識されるはずです。
今回は、odbc.ini、 odbcinst.iniともに/etc/配下に作成したため、問題ない認識でした。

解決方法

試行錯誤の結果、「5. ユーザフォルダ配下に、.odbc.ini、 .odbcinst.iniというファイル名で配置」したことで、RStudioが設定を認識してくれました。
/etc/配下のファイルは認識されていないように見えるのですが、はっきりとした原因はわかっていません。
個人的な解釈では、「USER DATA SOURCES」がなければ、「SYSTEM DATA SOURCES」を参照する、と思いこんでいたのですが・・・違うのでしょうか?

おわりに

少しモヤモヤが残る結果となりましたが、ひとまず無事に認識してくれてたので、一旦よしとしました。
原因について、ご存知の方がいましたらコメントいただけると幸いです。