開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・PostgreSQL: 9.2.24
・OS: macOS Catalina
実装
1.vagrant sshへログイン
$ vagrant ssh
2.yumを最新版にアップデート
$ sudo yum -y update
3.PostgreSQLをインストール
$ sudo yum -y install postgresql
$ sudo yum -y install postgresql-devel
$ sudo yum -y install postgresql-server
psql --versionを実行して、バージョンが表示されればインストール完了です。
$ psql --version
psql (PostgreSQL) 9.2.24
4.PostgreSQLを初期化
$ sudo postgresql-setup initdb
5.PostgreSQLを起動
$ sudo service postgresql start
6.PostgreSQLのアカウントを作成し、ログインする
$ sudo -u postgres psql
postgres=# create role [任意のユーザー名] with createdb login password '[任意のパスワード]';
\duを実行してRoleが追加されていればアカウント作成完了です。
postgres=# \du
List of roles
Role name | Attributes | Member of
-------------+------------------------------------------------+-----------
[任意のユーザー名] | Create DB | {}
postgres | Superuser, Create role, Create DB, Replication | {}
7.データベースを確認
手順4のsudo postgresql-setup initdbで作成されたデータベースを確認する。
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+-----------+---------+-------+-----------------------
postgres | postgres | SQL_ASCII | C | C |
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
※ template0とtemplate1の違いについては下記記事を参考にしてください。
PostgreSQLのtemplate0とtemplate1の違い
8.Railsアプリを作成
デフォルトのデータベースがSQLiteなので、-dオプションでPostgreSQLを指定する。
$ rails new sample -d postgresql
9.database.ymlを編集
templateは、まっさらなデータベースを作成することが出来るtemplate0を指定する。
default: &default
adapter: postgresql
encoding: unicode
template: template0
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: 手順6で設定したユーザー名
password: 手順6で設定したパスワード
10.データベースを作成
$ rails db:create
※ FATAL: Ident authentication failed for userというエラーが出る場合
① PostgreSQLの設定ファイルを開く。
$ sudo vi /var/lib/pgsql/data/pg_hba.conf
② 最下部にある認証方式を編集する。
METHODをmd5に変更してください。
.
.
.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
【よく使う認証方式】
ident : DBの所有者が、シェルを実行しているOSのユーザ名と一致するかで認証する、
md5 : パスワードで認証する。
trust : 認証なし。
よく使うコマンド
【ログイン前】
sudo service postgresql start : 起動
sudo service postgresql stop : 停止
sudo service postgresql restart : 再起動
sudo -u postgres psql : ログイン
【ログイン後】
\q : ログアウト
\? : ヘルプ表示
\l : データベース一覧表示
\du : ユーザー一覧表示
\c データベース名 : データベースへ接続
\z : テーブル一覧表示