トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

BugTrack-R備忘録/26

R備忘録 /状態空間モデリング/donlp2/その他のメモ

R備忘録 - 記事一覧

RODBCでいろんなデータベースと通信する

  • 投稿者: みゅ
  • カテゴリ: なし
  • 優先度: 普通
  • 状態: 完了
  • 日時: 2009年04月22日 08時50分44秒

内容

Rのパッケージ【RODBC】を使ってみる

  • というか、実務では使いまくってます.

unixODBCのインストール

  • RODBCを使うためにはまずunixODBCをインストールする必要がある
    • (iODBCでもいいのかもしれない.適当)
  • コンフィグ
./configure --sysconfdir=/etc --enable-gui=no
    • 「--sysconfdir」を設定しないと、デフォルトでは「/usr/etc」にodbc.iniとかodbcinst.iniがあると思うらしい.
    • 実行時に環境変数「ODBCSYSINI=/etc」でもいいらしい.テスト済み.
    • 「--enable-gui=no」はみゅの環境では「Qtがなくてコンフィグが通らないよ」と怒られたので、つけただけ.
  • make
make
  • インストール.rootになって
make install

PostgreSQL

  • 世界ではSUNがMySQL買収してから、MySQLが大流行なんだそうで.
  • そんなこといっても、こっちはPostgreSQLでもう業務まわっちゃってんだもんさ(愚痴).
  • unixODBCでPostgreSQLと通信するためには、以下の2つが必要です
    • PostgreSQLのクライアントのインストール
    • psqlodbcのインストール

PostgreSQLのクライアントのインストール

  • サーバーのソースにクライアントが入ってるのでサーバーのソースをダウンロード
  • 普通にコンフィグ
./configure
  • 普通にmake
make
  • rootになってインストール.クライアントだけなので以下で.ソースに含まれる「INSTALL」に書いてある.680行目あたり.
make -C src/bin install
make -C src/include install
make -C src/interfaces install
make -C doc install

psqlodbc

  • コンフィグ
./configure
    • コンフィグが通らないことがあるかもしれない.エラーメッセージはわすれたけど、longのサイズが取得できないとかなんとか.また出たら更新しよう.
    • その場合は「/usr/lib:/usr/local/lib」を「LD_LIBRARY_PATH」に追加するとうまくいくかも.
    • ついでに「/usr/local/pgsql/lib」も「LD_LIBRARY_PATH」に追加しておこう.
  • make
make
    • makeでもエラーが出ると思う.
    • 「unixodbcの関数定義と引数が違う」とか怒られるので、psqlodbc側のソースを合うように変更しちゃいます.環境によって怒られる場所は違うと思うけど、以下のような感じ.
SQLRETURN SQL_API SQLColAttributeW(
        SQLHSTMT        hstmt,
        SQLUSMALLINT    iCol,
        SQLUSMALLINT    iField,
        SQLPOINTER      pCharAttr,
        SQLSMALLINT     cbCharAttrMax,
        SQLSMALLINT     *pcbCharAttr,
#if defined(WITH_UNIXODBC) || (defined(WIN32) && ! defined(_WIN64))
        /*SQLPOINTER    pNumAttr*/                          ←ここをコメントアウト
        SQLLEN          *pNumAttr                           ←この行を追加
#else
        SQLLEN          *pNumAttr
#endif
        )
{
    • 家の32ビット環境だと2箇所、会社の64ビット環境だと3箇所修正した.
  • makeが通ったら、rootになってインストール
make install

【/etc/odbcinst.ini】の設定

[PostgreSQL64]   
Description    = ODBC for PostgreSQL   
Driver         = /usr/local/lib/psqlodbcw.so   
Setup          = /usr/local/lib/libodbcpsqlS.so   
FileUsage      = 1   
  • ,蓮odbc.ini】で参照する名前.何でもいいけど、わかり易いものをつけましょう.
  • △魯灰瓮鵐
  • とい呂茲わかんないけどこれで動いてます.
  • イ睇毀澄ΑΑ
  • ちなみに上記.soのlddは以下な感じ
$ ldd /usr/local/lib/psqlodbcw.so
        libpq.so.5 => /usr/local/pgsql/lib/libpq.so.5 (0x00002ae1edddb000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae1ee014000)
        libodbcinst.so.1 => /usr/local/lib/libodbcinst.so.1 (0x00002ae1ee22e000)
        libc.so.6 => /lib64/libc.so.6 (0x00002ae1ee444000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002ae1ee797000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003ebca00000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002ae1ee9cf000)
$ ldd /usr/local/lib/libodbcpsqlS.so
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b727afaf000)
        libc.so.6 => /lib64/libc.so.6 (0x00002b727b1c9000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003ebca00000)

【/etc/odbc.ini】の設定

[ZZZ_zzz]   
Description     = PostgreSQL   
Driver          = PostgreSQL64   
Trace           = No
TraceFile       =
Database        = aaa   
Servername      = host_name   
Username        =
Password        =
Port            = 5432
Protocol        = 6.4
ReadOnly        = No
RowVersioning   = No
ShowSystemTables= No
ShowOidColumn   = No
FakeOidIndex    = No
ConnSettings    =
UseID           =
  • ‥当な名前をつけましょう.アプリケーションから参照されます.
  • ▲灰瓮鵐箸任
  • 「odbcinst.ini」でつけた名前でどのドライバーを使うのかを指定します.
  • postgreSQLの使用するデータベースの名前を指定します.
  • ゥ機璽弌爾離曠好般召任后
  • これで動くはずです.
  • isqlで確認してみましょう
isql ZZZ_zzz uid pwd -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
    • -vをつけることで、つながらない場合のヒントになるかもしれません.

R

library(RODBC)
cn <- odbcConnect("ZZZ_zzz", "postgreSQLのユーザー名", "パスワード")
  • 接続完了

コメント