Rails
PostgreSQL
RubyOnRails
Rails5

Rails で postgresql を使う(インストールからマイグレーションまで)

はじめに

Rails アプリケーションの開発を進めていくなかで、ついつい sqlite に頼ったままどんどん前に進んでしまうことがよくある。
MySQL か postgreSQL に変えなきゃな〜〜と思いつつ sqlite をそのまま使いつづけるのを防ぐため、まとめておく。

postgresql の設定

Homebrew でインストール

$ brew update
$ brew install postgresql

起動&接続

以下で実行してみる。

$ postgres

エラーになるはず。

postgres does not know where to find the server configuration file.
You must specify the --config-file or -D invocation option or set the PGDATA environment variable.

コンフィグファイルを指定していないのが原因

postgresql を brew で install したときに、
/usr/local/var/postgres
が作成されている。これを環境変数にセットしておく。
~/.bashrc に以下を追加。

export PGDATA='/usr/local/var/postgres'

もちろん $ source ~/.bashrc する。

今度は起動できる

$ postgres

起動した状態で、別プロセスから接続可能

$psql -d postgres
psql (9.6.3)
Type "help" for help.
postgres=#

Rails の設定とか

database.yml

config/database.yml を以下のように変える。

config/database.yml
default: &default
adapter: postgresql
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: user
password: pass
host: localhost
timeout: 5000

development:
<<: *default
database: hoge_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: hoge_test

production:
<<: *default
database: hoge_production

設定に合わせてDB&user作成

便利な createdb/dropdb などのコマンドがあるのでそれを使う。

$ createdb hoge_production
$ createdb hoge_development
$ createdb hoge_test
$ createuser user

マイグレーション

以下で development 環境の DB をマイグレーション

$rails db:migrate RAILS_ENV=development

以下で確認可能

$ rails db
$ psql -d habit_manager_development