鶏頭のプログラム

Ruby, Javascript, C言語, SQLなどのプログラミング

RubyとPostgreSQL

なんだかんだと、私はPostgreSQLが一番好きです。
別に一番使いやすいから好きだというわけでもないのですが
最近いくつかのデータベース(NetezzaやVerticaなど)が
PostgreSQLをベースに作られていますし、なによりオープンソースなので気に入っています。
(MySQLOracleの傘下になっているのであまり使いたくない)

というわけで今回はRubyからPostgreSQLを叩いてみます。

RubyからPostgreSQLに接続するには 'pg' というgemを使うのが一般的です。
ですのでまずは

 $ gem install pg

上記のコマンドでエラーになる場合は

 $ gem install pg --with-pg-config=pg_configファイルのパス

コマンドで pg をインストールします。
PostgreSQLのライブラリが入っていない(pg_configのファイルがない)とここでエラーになります。
その場合はPostgreSQLのライブラリをインストールしてください。

ではRubyのほうを書いていきます。

require 'pg'

connect = PG::connect(host: "localhost", user: "user", password: "secret", dbname: "database_name", port: "5432") 
results = connect.exec("SELECT current_date hoge")

results.each{|result|
  p result["hoge"]
}

connect.finish

実行出力は

$ "2014-07-12"

このように接続し取得することができます。
ちなみにportはデフォルトで5432となっていますので
5432のままなのであればconnectの引数でなくても問題ありません。

設定ファイルを外出しにしたい場合は下記のような感じにするのがよいかと思います。

database.yml

db:
  development:
    host: localhost
    user: user
    password: password
    dbname: testdb
    port: 5432
    
  product:
    host: localhost
    user: user
    password: password
    dbname: realdb
    port: 5432

database.rb

require 'pg'
require 'yaml'

dbconf = YAML.load_file("./database.yml")["db"]["development"]
connect = = PG::connect(dbconf)
results = connect.exec("SELECT current_date hoge")

results.each{|result|
  p result["hoge"]
}

connect.finish

これで実行するとdeveopをproductに変更すれば接続するデータベースをへんこうできます。

もっと便利なActiveRecordもありますが、それはまたの機会に。