在Laravel中使用PostgreSQL
假设
假设已完成Laravel和PostgreSQL的安装。
创建数据库
- 任意のユーザでPostgreSQLにログインする
$ sudo su postgres # postgresユーザにログイン
$ psql # PostgreSQLにログイン
- データベースを作成する(以下の場合作成者はpostgresユーザになる)
postgres=# CREATE DATABASE {データベース名}
编辑.env文件
-
- Laravelでデータベースに接続する環境変数を定義する.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です。(パスは少し違うかも知れません)
# "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を実行すればめでたし、テーブルが作られます。