PostgresPRを使ってみた
簡単な使い方を忘れないうちに。あと列名でアクセスできるようなModuleも作ってみた。
require 'postgres-pr/connection' # gemから取得 # 列名でアクセスできるようにするモジュール # character encodings differ: UTF-8 and ASCII-8BIT (ArgumentError)対策もしてみた col_accessor = Module.new {|mod| mod.module_eval { @@fields = {} def self.extended(obj) if obj.is_a? PostgresPR::Connection::Result then undef_method(*@@fields.keys) obj.fields.each_with_index {|f,i| @@fields[f.name] = i } else @@fields.each {|name,i| define_method(name.to_sym) { s = self[i] (s.is_a? String) ? s.force_encoding('UTF-8') : s } } end end } } # URLは tcp://(HOST):(PORT) か unix:(ソケットのパス) の形式 # ソケットのパスは /tmp/.s.PGSQL.5432 とか /var/run/postgresql/.s.PGSQL.5432 とか pg = PostgresPR::Connection.new(DB名, USER名, PASSWORD, URL) pg.query('SELECT id,name FROM hoge').extend(col_accessor).rows.each {|r| r.extend(col_accessor) # これで r.id とか r.name でアクセスできるようになる … } pg.close
列名が重複してたときとか、メソッドに使えない文字が入ってたときとかの処理はしてないけどサクっと書くぶんにはこれで十分かなと。