rubyからPostgreSQLへのアクセス その1
pgというgemでPostgreSQLへrubyからアクセスできます。
rubyには史上最強のO/R mapperであるActiveRecordが存在するため、PostgreSQLとのインターフェイスとしてはそちらを先に想定すべきです。
しかし、ちょっとSQLを投げたいだけの場合にはむしろこちらのほうが便利です。
注意していただきたいのはSELETしてきた結果の取り出しです。
pgでは結果はレコードを表すハッシュの配列として帰ってきます。
id,name.ageというテーブルがある場合、結果として帰ってくるのは次のような配列です。
result[0]['id']=>1
result[0]['name']=>sato
result[0]['age']=>26
result[1]には次の結果の行が入っています。
select max(id),max(age) のようなクエリを使った場合結果として帰ってくる行の名前が
同名であるため、maxというキーが2つ帰ってきます。
これでハッシュが上書きされるため正常に取り出せません。
AS 句をうまく使いましょう
rubyには史上最強のO/R mapperであるActiveRecordが存在するため、PostgreSQLとのインターフェイスとしてはそちらを先に想定すべきです。
しかし、ちょっとSQLを投げたいだけの場合にはむしろこちらのほうが便利です。
基本:行数を表示するだけ
$LOAD_PATH << "."
require 'pg'
#接続する
db = PG::connect("127.0.0.1",5432 ,"","","mydb","sato","password")
#クエリの定義
sql="select count(*) from tbl";
#クエリの実行
result=@db.exec(sql)
#行数の表示
p result[0]["count"].to_i
注意していただきたいのはSELETしてきた結果の取り出しです。
pgでは結果はレコードを表すハッシュの配列として帰ってきます。
id,name.ageというテーブルがある場合、結果として帰ってくるのは次のような配列です。
result[0]['id']=>1
result[0]['name']=>sato
result[0]['age']=>26
result[1]には次の結果の行が入っています。
select max(id),max(age) のようなクエリを使った場合結果として帰ってくる行の名前が
同名であるため、maxというキーが2つ帰ってきます。
これでハッシュが上書きされるため正常に取り出せません。
AS 句をうまく使いましょう