前回のRubyに関する記事(Rubyで作成するアンケートシステム ファイルの読み込み編)では、ファイルの読み込みを紹介しましたが、今回は、DB関連です。DBにも当然いろいろありますので、その中のPostgresの操作を紹介します。
Postgresの操作を紹介するのは、CRUD操作です。ただ、私が使用しているバージョンでは日本語が扱えません。原因は分かっているのですが、とりあえず問題を置いて紹介しておきます。
require "postgres"
# 表示メソッド
def view(conn)
res = conn.exec("SELECT * FROM USER_INFO;")
res.each{|items|
print items[0]
(items.size-1).times{|i|
print ",", items[i+1]
}
}
print "\n"
end
conn = PGconn.connect("localhost",5432,"","","enquete","enquete","enquete")
# 本来は、ここでクライアントのエンコードを設定する
# conne.set_client_encoding("utf-8")
begin
# データの挿入
conn.exec("INSERT INTO USER_INFO(USER_ID,USER_NAME,PASSWORD)VALUES('user1','user1','pass');")
view(conn)
# データの更新
conn.exec("UPDATE USER_INFO SET USER_NAME = 'user-1' WHERE USER_ID = 'user1';")
view(conn)
# データの削除
conn.exec("DELETE FROM USER_INFO WHERE USER_ID = 'user1';")
view(conn)
rescue => ex
conn.exec("ROLLBACK;")
print ex.message, "\n"
ensure
conn.close()
end
例外処理を設けて、ロールバックしていますが、例えば、挿入後に例外が発生して、ロールバックしても挿入はコミットしてしまいます。たぶんプログラム上で、自動コミットしないようにしないといけないのですが、その情報もまだ知りません。やはり、postgresでは、情報が少ないので、そろそろ区切りをつけてmysqlで素直に作成しようと考えています。クライアントのエンコード設定は、postgresドライバのバージョンによって設定が違っているようです。今回使用したのは、0.4.0で、Webの情報によると0.7.1では「set_client_encoding」メソッドが使用できるようです。ただ、gemでアップデートしようとしましたが、失敗しました。どうやら他も同時にアップデートして、バージョンをそろえないといけないみたいです。情報は現在こんなところです。