rubyからpostgresqlを使う

rubyからpostgresを使うには Ruby PostgreSQL拡張モジュールを使う。APIの説明はPostgres referenceを参照。

Debian(sid)でのモジュール名は libpgsql-ruby1.8。

 $ sudo apt-get install libpgsql-ruby1.8

簡単な使い方を書いておく。

 require 'postgres'

 # postgres に接続
 conn = PGconn.connect("localhost", 5432, "", "", "testdb", "user", "passwd")

 # クエリを発行
 res = conn.exec("select id, val1, val2 from test_table")
 begin
   res.num_taples.times do |row|
     res.num_fields.times do |col|
       print "#{res.getvalue(row, col)}, "
     end
     print "\n"
   end
 ensure
   res.clear if res != nil
 end

 # 以下でも同じ
 conn.query("select id, val1, val2 from test_table").each do |row|
   puts row.join(", ")
 end

 # 行追加
 res = conn.exec("insert into test_table1 values (1, 'hoge', 'fuga')");
 puts res.status # 成功すれば COMMAND_OK(1) が返る
 res.clear

 # 以下でも同じ。複数行追加するならこっちが便利
 conn.insert_table("test_table", [ [2, 'hoge2', 'fuga2'], [3, 'hoge3', 'fuga3'] ])

 # コネクションの切断
 conn.close

PGconn.exec で返る PGresult は実行するたびにインスタンスが作られるので、不要になったら必ず clear しておくこと。

あと、トランザクションの管理は明示的に「BEGIN 〜 COMMIT or ROLLBACK」を exec しないといけない。