rails5 DBをPostgreSQLに変更する

PostgreSQL側の作業

  • pg_hba.confを編集
    (peer -> md5) 詳細は別記事にでも

  • パスワード変更

alter role postgres with password 'postgres';
  • デーモン再起動
sudo systemctl restart postgresql-10
  • Userを作成
/bin/createuser -P --interactive [username]
新しいロールのためのパスワード: 
もう一度入力してください:
新しいロールをスーパーユーザにしますか? (y/n)n
新しいロールに対してデータベースを作成する権限を与えますか? (y/n)y
新しいロールに対して別のロールを作成する権限を与えますか? (y/n)n
$ psql
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 username | Create DB                                                  | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

Rails側の作業

  • アプリ作成時に、DBにpostgresqlを指定する場合
  • アプリ作成後に、DBをpostgresqlに変更する場合 gemをインストール
    gemfileに 'pg'を追加
 bundle install

以下のerrorが出た場合

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /home/ryohei/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/pg-1.0.0/ext
/home/ryohei/.rbenv/versions/2.5.0/bin/ruby -r ./siteconf20180314-25746-bfjmau.rb extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

メッセージの通り、pg_configが見つからないので、--with-pg-config=/path/to/pg_configを付与してbundle installすればよい 自分の環境では/usr/pgsql-10/bin/pg_configにあるので、

bundle config--with-pg-config=/usr/pgsql-10/bin/pg_config

config/database.ymlを編集

$ rails db;setup

ここでエラーが出る場合は認証周り(postgres側はpg_hba.confの認証設定、ユーザのパスワード設定、rails側はconfig/database.ymlのuser/password)