前提
LaravelとPostgreSQLのインストールは済んでいるものとする。
データベースを作成
- 任意のユーザでPostgreSQLにログインする
bash
$ sudo su postgres # postgresユーザにログイン
$ psql # PostgreSQLにログイン
- データベースを作成する(以下の場合作成者はpostgresユーザになる)
bash
postgres=# CREATE DATABASE {データベース名}
.envを編集
- Laravelでデータベースに接続する環境変数を定義する
.env
ファイルを編集する。 - (データベースへの作成権限を持っているユーザが違う場合、そのユーザを指定すると良いハズ)
.env
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE={データベース名}
DB_USERNAME=postgres
DB_PASSWORD=postgres
php artisan migrate
を実行
- Laravelをインストールした時に最初からあるハズの
create_users_table.php
とcreate_password_resets_table.php
を元にテーブルが作られる。 - と思いきや下記のエラーが発生。
エラーメッセージ
Illuminate\Database\QueryException : SQLSTATE[08006] [7] FATAL: Ident authentication failed for user "postgres" (SQL: select * from information_schema.tables where table_schema = public and table_name = migrations)
- postgresユーザの認証に失敗したようです。原因は
postgreSQL
の認証方法の設定にありました。 - 設定ファイルは
/var/lib/pgsql/9.6/data/pg_hba.conf
です。(パスは少し違うかも知れません)
pg_hba.conf
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
-
peer
ident
の部分が認証方法です。 -
両方とも、
オペレーティングシステムのユーザ名
と認証に使用するユーザ名が一致しないと認証に通らない仕組みのようです。 -
ここを
md5
password
trust
のいずれかに変えると認証できるようになります。(trust
は無条件で認証してしまうので避けたほうがいいかも知れません) -
今回はマイグレーションのためにpostgreSQLに接続したいので
# IPv4 local conections
の方だけ変えれば大丈夫です。 -
ということで再度
php artisan migrate
を実行すればめでたし、テーブルが作られます。