Mnesiaとかdets使えばいいじゃんというツッコミはさておいて、erlangでsql叩きたいという需要は結構あるみたい。新レガシーからの移行だね。というのもまあ、おいといて、erlangからpgsqlプロトコルを喋ってpgsqlデーモンにアクセスできる(ともっぱら噂の)コードは今のところ、
- jungerl系
- jungerl
- erlang-consulting
- erlang-psql-driver
- ejabberd系
- ODBC
の5通りがあって、中でもejabberd-moduleが一番安定しているらしい。erlang-psql-driverは、erlang-consultingが持っていたコードをerlyweb向けにportしたものらしいんだけど、使い方が全然分からなくて断念。jungerlに至ってはsourceforge.netのサイトが市んでるっぽい。
ODBCはポスグレネイティブじゃないという身勝手な理由で却下。しばらくjungerl系に挑戦していたんだけど、sys.configとかpsql.appとかapplication:start(psql).がちっとも上手くいかず、erlywebと併用しないとうまくいかないんだろうなと思って断念した*1。
で、ejabberd-module/pgsqlを使ってみた記録(大したものではない)。
最初、process-one.netのサイトの使い方が全然分からん(svnレポジトリのアドレスが不明)かったので右往左往していたが、ejabberdのサイトから案内を発見。
$svn co https://svn.process-one.net/ejabberd-modules $cd ejabberd-modules/pgsql/trunk $erl -make $erl erl> {ok, Db}=pgsql:connect("localhost", "schema?", "username?", "passwd"). {ok, <0.40.0>} erl> pgsql:squery(Db, "select * from pg_tables limit 10"). {ok, [{"select ....
ご丁寧にカラム名や命令文までぜーんぶ変数にして出してくれます。
*1:どこかに単独でドライバとして使ってる人柱code snippetがあったら嬉しい