RubyとPostgreSQL
なんだかんだと、私はPostgreSQLが一番好きです。
別に一番使いやすいから好きだというわけでもないのですが
最近いくつかのデータベース(NetezzaやVerticaなど)が
PostgreSQLをベースに作られていますし、なによりオープンソースなので気に入っています。
(MySQLはOracleの傘下になっているのであまり使いたくない)
というわけで今回は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もありますが、それはまたの機会に。