はじめに
Railsアプリ開発中に、rails s
でサーバー立ち上げた際以下のエラーが、、、
ターミナル
PG::ConnectionBad (FATAL: role "root" does not exist):
PG::ConnectionBadってなに?
このエラーが出る原因は色々あるようですが、簡単にいうと**PostgreSQLと接続できませんよ!**ってことみたいです。
原因
今回のエラーではrootと言う名前のロールがないのが問題のよう。
※ちなみにPostgreSQLで言うロールとは、ざっくりいうとログイン権限を持つユーザのことです。
解決手順
結論
root
という名前のロールを作成して権限を与えるだけ!
ロールを作成
まずはDBへ接続
ターミナル
psql -d postgres
rootのロールを作成
PostgreSQL
postgres=# CREATE ROLE root WITH LOGIN PASSWORD 'root';
続いてpsql
コマンドでロールの情報を表示
PostgreSQL
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
riku10 | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
root | | {}
Role name
がroot
のものが追加されてますね。しかし、この段階ではまだ権限は与えられていません。
権限を与える
Role name
がriku10
の時のみ、Create role
の権限がついているため、ユーザネームriku10
でDBに接続します。
ターミナル
psql -U riku10 -d postgres
接続後、権限を付与します。
PostgreSQL
ALTER ROLE root SUPERUSER CREATEDB;
もう一度\du
でロールの情報を確認してみましょう。
PostgreSQL
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
riku10 | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
root | Superuser, Create DB | {}
きちんと権限も付与できていますね。
さいごに
これでrails db:migration
を行った後、rails s
を行うことできちんとサーバーを起動できるはずです。
絶対忘れると思ったのですぐ記事にしました!
この記事が同じように困っている人の助けになれば嬉しいです。