11
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

LaravelでPostgreSQLを使う

前提

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.phpcreate_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

pg_hba.conf についての詳細はこちら

  • peer identの部分が認証方法です。

  • 両方とも、オペレーティングシステムのユーザ名と認証に使用するユーザ名が一致しないと認証に通らない仕組みのようです。

  • ここをmd5 password trust のいずれかに変えると認証できるようになります。(trustは無条件で認証してしまうので避けたほうがいいかも知れません)

  • 今回はマイグレーションのためにpostgreSQLに接続したいので# IPv4 local conectionsの方だけ変えれば大丈夫です。

  • ということで再度php artisan migrateを実行すればめでたし、テーブルが作られます。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
11
Help us understand the problem. What are the problem?