Rails PostgraSQLを使う

RailsでPostgreSQLを使うには、database.ymlにPostgreSQLのデータベース情報を記述します。

環境

  • OS: Ubuntu Server 14.04

手順

  1. PostgreSQLをインストールし、データベースを作成する。
  2. RailsにPostgreSQL用のgemを導入する。
  3. Railsのdatabase.ymlをPostgreSQL用に記述する。

ステップ1. PostgreSQLをインストールし、データベースを用意する

ここでは次のデータベースを用意するものとします。

  • データベース名: rails_db
  • ユーザ名: rails_user
  • パスワード: rails_pass

手順については、こちらのUbuntuへのインストールとデータベースの作成ポストに記載しました。

RailsでPostgreSQL用のgemを使う時に、追加で次のパッケージが必要となるのでインストールしておきます。

$ sudo apt-get install libpq-dev

ステップ2. PostgreSQL用のgemを導入する

gemfileを開き、pg gemを追加します。

gem 'pg'

gemをインストールします。

$ bundle install

ステップ3. database.ymlを更新する

database.ymlを開き、次のようにします。development, test, productが全て同じ設定になっているので、適時変更します。ここではdevelopment環境のみ使用する前提でこのまま進めます。

# config/database.yml
default: &default
 adapter: postgresql
 database: rails_db
 username: rails_user
 password: rails_pass
 host: 127.0.0.1
 encoding: utf8

development:
 <<: *default

test:
 <<: *default

product:
 <<: *default

動作確認1

rails dbconsoleコマンドでデータベースクライアントが開けるか確認します。

$ rails dbconsole

開けた場合は次のように表示されるので、\q で終了します。

データベース名=> \q

動作確認2

次にデータベース自体の破棄、作成が行えるかを確認します。

$ rake db:migrate:reset

データベースユーザにデータベースの作成権限が無いと失敗します。

PG::InsufficientPrivilege: ERROR:  permission denied to create database

これを解決するためには、データベースユーザにデータベースの作成権限を付与します。次のように、PostgreSQLのターミナルでALTER ROLEによりCREATEDBオプションを付与します。

$ sudo -u postgres psql
postgres=> ALTER ROLE rails_user WITH CREATEDB;
ALTER ROLE

正しく権限が付与されたか \duコマンドで確認します。rails_user | Create DBのようになっていればOKです。

postgres=> \du

補足: 権限を外す場合はALTER ROLEによりNOCREATEDBオプションを付与します。