erlangでpostgresql

Mnesiaとかdets使えばいいじゃんというツッコミはさておいて、erlangsql叩きたいという需要は結構あるみたい。新レガシーからの移行だね。というのもまあ、おいといて、erlangからpgsqlプロトコルを喋ってpgsqlデーモンにアクセスできる(ともっぱら噂の)コードは今のところ、

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があったら嬉しい