2008年05月12日

H2 Database Engine

仕事で使用するDBとしてH2 Database Engineを使っている。
H2を使う上でのちょっとしたメモ。

Linux版のインストールは単にファイルを解凍するだけ。bin/h2.shを実行すればOK。
設定はservice/wrapper.confをいじる。

ローカル以外からのWebコンソール画面の表示を許可するには以下のように設定。
h2server.shとか作って

#!/bin/sh
cp=h2.jar
if [ -n "$H2DRIVERS" ] ; then
cp="$cp:$H2DRIVERS"
fi
if [ -n "$CLASSPATH" ] ; then
cp="$cp:$CLASSPATH"
fi
java -cp "$cp" org.h2.tools.Server -tcpAllowOthers -pgAllowOthers -webAllowOthers

とオプションを付ける。

RubyからH2にアクセス。日本語英語ともに情報が少なくちょっと苦労した。わかればなんてことはない。
-pgAllowOthersを付けて実行し、postgreSQLプロトコルをONにする。
サーバ起動時に以下のようにPGサーバがothers can connectになればOK。
PG server running on pg://localhost:5435 (others can connect)
ログにでると思うが、デフォルトで5435ポートで待ち受ける。

RubyはPostgres(Ruby PostgreSQL 拡張モジュール)を使うのでそれを入れる。

H2デフォルトのパスワード無しのユーザでログインしようとすると以下のように怒られる。
fe_sendauth: no password supplied (PGError)

パスワード無しユーザーでのログインはRubyのPGモジュールで対応していないようだ。
よってパスワード有りユーザを作成する。
CREATE USER user PASSWORD 'hoge';
ALTER USER user ADMIN TRUE;
みたいな感じに作って管理者権限も与える。

後はRubyで以下のように実行。

require "postgres"
conn = PGconn.connect("123.456.789.123", 5435, "", "", "DB","user","hoge")
res = conn.exec("select * from TABLE;")

numFields = res.num_fields
numTuples = res.num_tuples
numTuples.times{ | i |
text = ""
numFields.times{ | l |
if res.getvalue( i , l ) != nil then text = text + res.getvalue( i , l ) end
text = text + ","
}
puts(text)
}


Comment on "H2 Database Engine"

"H2 Database Engine"へのコメントはまだありません。

Post a Comment

コメントする

コメント登録機能が設定されていますが、TypeKey トークンが設定されていません。