はじめに
Railsアプリ開発中に、rails sでサーバー立ち上げた際以下のエラーが、、、
PG::ConnectionBad (FATAL: role "root" does not exist):
PG::ConnectionBadってなに?
このエラーが出る原因は色々あるようですが、簡単にいうと**PostgreSQLと接続できませんよ!**ってことみたいです。
原因
今回のエラーではrootと言う名前のロールがないのが問題のよう。
※ちなみにPostgreSQLで言うロールとは、ざっくりいうとログイン権限を持つユーザのことです。
解決手順
結論
rootという名前のロールを作成して権限を与えるだけ!
ロールを作成
まずはDBへ接続
psql -d postgres
rootのロールを作成
postgres=# CREATE ROLE root WITH LOGIN PASSWORD 'root';
続いてpsqlコマンドでロールの情報を表示
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
接続後、権限を付与します。
ALTER ROLE root SUPERUSER CREATEDB;
もう一度\duでロールの情報を確認してみましょう。
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を行うことできちんとサーバーを起動できるはずです。
絶対忘れると思ったのですぐ記事にしました!
この記事が同じように困っている人の助けになれば嬉しいです。