はじめに
Rails開発途中に、DBはsqliteを使用していたけれど、PostgreSQLに変更したい!
このような時にPostgreSQLのインストールから、RailsでPostgreSQLを使えるようにするまでを記載いたします。
//インストールが正常にできたか確認
$ postgres --version
PGDATA設定
.bash_profileファイルに PostgreSQLを追加
ターミナルで以下コマンドを入力して.bash_profileを開きます。
以下順番で.bash_profileに追記します。
// 1.カーソルの位置で入力モードに切り替え
i
export PGDATA=/usr/local/var/postgres
// 3.コマンドモードに切り替え
esc
// 4.保存して終了
:wq
保存できたら、cat .bash_profileをターミナルで実行し、ファイルの中身を確認しましょう。
export PGDATA=/usr/local/var/postgresが記載されていることを確認し、以下コマンドでシェルの設定ファイルを反映させます。
データベース接続ユーザを作成
//MyAppという名前のユーザーを作成
$ createuser MyApp
//パスワードが必要な場合
$ createuser MyApp -P
DB作成
-Oオプションで先ほど作成したユーザーをオーナーに指定します。
$ createdb MyApp_dev -O MyApp
Posgreユーザー作成の際に、バージョンの互換性によるエラーがでた場合
The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 12.4.
現在のバージョン12.4だが、バージョン11にする必要があるよ、と言われてエラーになってます。
以下方法で対処しましょう。
//バージョン12.4を停止し、新しくインストールしたバージョン11を起動する。
DBが正常に起動するか確認
・DB起動
・ユーザー情報を確認
$ psql -c 'select * from pg_user' postgres
・DBの一覧を表示
作成したDBの名前やオーナー等を一覧で表示します。
*ユーザー、DBを削除する方法
不要なユーザー、DBがあれば以下コマンドで削除可能です。
$ dropuser ユーザ名 //ユーザー削除
$ dropdb DB名 //DB削除
・作成したユーザーへ権限付与
権限を付与するのに必要な、macのユーザー名を確認します。
次にpsqlコマンドで作成済みのデータベースに接続し権限を付与します。
DBへの接続は次のようにして行います。
$ psql -U taro(macのユーザー名) MyApp_dev
$ psql -U kenta MyApp_test
psql (13.2, server 11.11)
Type "help" for help.
//ユーザー一覧を表示
MyApp_test =# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
MyApp | | {}
macのユーザー名 | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
//MyAppにSuperuserの権限を付与
MyApp_test =# ALTER ROLE "MyApp" WITH Superuser;
//再度ユーザー一覧を表示しMyAppにSuperuserの権限が付与されたか確認
ALTER ROLE
RestockInventory=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
MyApp | Superuser | {}
macのユーザー名 | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
RestockInventory=# \q //操作終了
DBが正常に起動し、作成したユーザー、DB等の確認が終わったら起動しているDBを止めておきましょう。
ここからは先ほどセットアップを行なったPostgreSQLをRailsに適用していきます。
Gemfileの変更
初期設定のsqliteをコメントアウトしgem 'pg’を指定
/Gemfile
# gem 'sqlite3', '~> 1.4'
gem 'pg'
ターミナルにてbundle installを実行しましょう。
config/database.ymlを書き換え、作成したPostgreSQLを指定する
config/database.yml
default: &default
# adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
encoding: utf8 #変更
username: MyApp # 追加
password: # 追加
development:
<<: *default
# database: db/development.sqlite3
database: MyApp_dev #変更
test:
<<: *default
database: MyApp_test #変更
production:
<<: *default
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
DB動作確認
migrateをリセットし、seedデータを入れてDBの動作確認を行います。
テストデータを挿入できたら以下コマンドでデータベースの中身を確認して見ましょう。
psql (13.2, server 11.11)
Type "help" for help.
MyApp_development=# SELECT * FROM [モデルで作成されたテーブル名];
おわりに
以上で、RailsにPostgreSQLの導入が完了しました!
少し長くなってしまいましたが、読んでいただきありがとうございます。
ただ最初からPostgreSQLを指定して開発環境を作成していた方が、おそらくというか確実に楽でしょう。。。
Ruby on Railsを学びたい方へ
【おすすめ Udemy】よくわかるRuby on Rails入門 オンライン講座
参考サイト
PostgreSQLのインストールからRailsでのDB変更まで - Qiita