LoginSignup
0
1

More than 3 years have passed since last update.

PostgreSQLでrails db:createするまでに出たエラーと解決方法

Last updated at Posted at 2019-11-24

はじめに

RailsでPostgreSQLを使おうとしたところ結構ハマったので解決方法まとめました

環境

MacBook Air
Mojave 10.14.6
Cloud9

エラーの原因と解決方法

【エラー1】 FATAL: role "ec2-user" does not exist

PostgreSQL上に"ec2-user" というロールが存在しないという意味

※ロールとは権限をまとめたもの、ロールを設定しないとテーブルを作れなかったりする

本来はユーザーにロールを付与するものなので別物だが、上記のエラーはユーザーと
言い換えてもいいと思う

PostgreSQL上に"ec2-user"を作成してもいいが、PostgreSQLにはデフォルトで
"postgres"というロールが存在するのでそれを使うこともできる

そもそもログインユーザー名がローカルユーザー名になっているのはdatabase.ymlにusernameが抜けているからなので以下のようにusernameを追加すればOK

database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  username: postgres

  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: sample_development

test:
  <<: *default
  database: sample_test

production:
  <<: *default
  database: sample_production

これで"ec2-user"ではなく"postgres"でアクセスされるようになるはずなのでロールが存在しないエラーは解決すると思う

【エラー2】 FATAL: Peer authentication failed for user "postgres"

Peer認証を使っているため
※Peer認証とはUNIXユーザーとPostgreSQL内のユーザー名を比較して同じのがあればOK
なのでそもそもPostgreSQL内にec2-userのユーザーを作っておけば上記のエラーが出ない
今回は"postgres"を使用しており、これはUNIXユーザー名ではないのでエラーが起きたと考えられる

sudo vim /var/lib/pgsql9/data/pg_hba.conf
でpg_hba.confを開き、「peer」を「trust」か「md5」にする
「trust」 条件なしで認証
「md5」 パスワードが必要

設定を変更したあとは、sudo service postgresql restartでPostgreSQLを再起動しないと変更内容が反映されないので注意

【エラー3】 fe_sendauth: no password supplied

database.ymlにpasswordが設定されていないと出てくる

【エラー4】 FATAL: password authentication failed for user "postgres"

database.ymlで指定しているpasswordが間違っていると出てくる

なお、PostgreSQLのデフォルトユーザーであるpostgresのパスワードはNULLになっておりどのパスワードでも解除できないので、あらかじめパスワードを設定しておく必要がある

さらにpg_hba.confの認証方法をmd5にしてしまうとパスワードを入力しないとそもそもPostgreSQLにアクセスできないのでパスワードを設定するときは一度peerかtrustにしておく

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1