Cloud9でPostgreSQLを使えるようにする

Cloud9でPostgreSQLを利用するときに詰まったので、忘備録。 まずPostgreSQLを起動。

参考サイト

Cloud9でPostgreSQLを利用しHerokuにRails5.xをデプロイした時の手順

PostgreSQLをyumでインストール(yumとrpmの復習込み) - 薮蛇なエンジニアの開発備忘録

$sudo service postgresql start

入っていなかったらインストール。 ちなみにバージョンも確認しておこう

$ psql --versioon

でどうするか yumでインストールすると、最新版が無いことがある。

rpm -iは事前にパッケージをダウンロードして指定するか、パッケージのURLを指定する しかしyum依存関係を解消してインストールしてくれる。 よって基本yumでインストールする。

$ yum list | grep postgres

これでインストール可能なものをインストールする。 表示はこんな感じ。 f:id:happy_teeth_ago:20180919131930p:plain ちなみに古いバージョンがインストールされている場合は削除しておく。

先程の中から95のバージョンを選択する。

$$ sudo yum install postgresql95-devel postgresql95-server postgresql95-contrib

入れるときは同じバージョンの server,devel,contribの3つをインストールする。

その後DB初期化

$ sudo service postgresql95 initdb

postgresにpostgresユーザーでログイン

$ sudo -u postgres psql

postgresユーザーでpostgresにログインします。 postgresユーザーは、postgresインストール時に自動で作成されています。

ポスグレの中に入ったら

$ CREATE USER [username] SUPERUSER PASSWORD '[password]';

よって usernameというsuperuserを作成。

$UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';

DROP DATABASE template1;

CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';

UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';

\c template1

VACUUM FREEZE;

ポスグレから抜ける

\q

Cloud9の設定にユーザー名とパスワードを保存

echo "export USERNAME=username" >> ~/.profile

echo "export PASSWORD=password" >> ~/.profile

設定を反映

source ~/.profile

config>database.ymlはこんな感じ

default: &default
  adapter: postgresql
  encode: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  username: username
  password: <%= ENV['PASSWORD'] %>
  host:     <%= ENV['IP'] %>

development:
  <<: *default
  database: quiz_app_development

test:
  <<: *default
  database: quiz_app_test

production:
  <<: *default
  database: quiz_app_production
  username: quiz_app
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>

エラー

PG::ConnectionBad: FATAL:  Ident authentication failed for user "username"

ただ、 Peer認証が有効になってるとrails db:migrateがRailsからできません。 Peer認証が有効になっている場合は、ユーザ名とUnixユーザ名が一致している必要があります。

pg_hba.confファイルを変更する 探す

$ sudo find / -name pg_hba.conf | grep pg_

/var/lib/pgsql95/data/pg_hba.conf