在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を実行すればめでたし、テーブルが作られます。

bannerAds