開発環境
・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
: テーブル一覧表示