fedora28 に Postgresql をインストールしてLaravel5.6から接続する

fedora28 環境にPostgresql をインストールして
構築済みのLaravel5.6 で利用していたDBを MySQL から 
Postgresql に変更して DBマイグレーションとデータ内容を確認してみます

※ heroku でpostgresql を使うため、開発環境も postgresql にしてみる

# postgresql インストール
DNF では標準で 10.5 がインストール可能でした
楽ちん

```bash
$  sudo dnf install -y  postgresql-server
============================================================================================================================================
 パッケージ                              アーキテクチャ               バージョン                        リポジトリ                    サイズ
============================================================================================================================================
インストール:
 postgresql-server                       x86_64                       10.5-1.fc28                       updates                       5.1 M
依存関係のインストール:
 postgresql                              x86_64                       10.5-1.fc28                       updates                       1.5 M
 postgresql-libs                         x86_64                       10.5-1.fc28                       updates                       301 k

トランザクションの要約
============================================================================================================================================
インストール  3 パッケージ
```

# postgresql 初期設定

初期設定スクリプトを流して、サービスとして登録しときます

```bash
$  sudo  /usr/bin/postgresql-setup --initdb
$ 
$  sudo systemctl enable  postgresql
$  sudo systemctl start   postgresql
$ 
$  sudo  postgres --version
postgres (PostgreSQL) 10.5

```


# postgresql 接続確認

スーパーユーザーで接続してＤＢ一覧やユーザ一覧を確認してみる

```bash
$ sudo -u postgres psql -U postgres

■ＤＢ一覧
postgres-# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(3 行)

postgres-#


■ユーザ一覧
postgres=# \du
                                               ロール一覧
 ロール名 |                                     属性                                     | 所属グループ
----------+------------------------------------------------------------------------------+--------------
 postgres | スーパーユーザー, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}

postgres=#
```

# postgresql ユーザとＤＢを作成

Laravel用のユーザとＤＢを作成

```sql

■ユーザ作成
postgres=# CREATE USER lara_user  WITH PASSWORD 'lara_pass';
postgres=# ALTER ROLE lara_user  WITH SUPERUSER;
postgres=# \du
                                               ロール一覧
 ロール名  |                                     属性                                     | 所属グループ
-----------+------------------------------------------------------------------------------+--------------
 lara_user | スーパーユーザー                                                             | {}
 postgres  | スーパーユーザー, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}

postgres=#

■ＤＢ作成
postgres=# CREATE DATABASE lara OWNER lara_user;
CREATE DATABASE
postgres=# \l
                                          データベース一覧
   名前    |  所有者   | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限
-----------+-----------+------------------+-------------+-------------------+-----------------------
 lara      | lara_user | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 postgres  | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |           |                  |             |                   | postgres=CTc/postgres
 template1 | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |           |                  |             |                   | postgres=CTc/postgres
(4 行)

postgres=#
postgres=# \q
```

# Postgresql のログイン設定変更

標準だとユーザ名とパスワードでログインできないようなので、パスワードでログインできるように変更

```bash
$ sudo vi /var/lib/pgsql/data/pg_hba.conf

		# TYPE  DATABASE        USER            ADDRESS                 METHOD
★		host   lara            lara_user        127.0.0.1/32            md5


$ sudo systemctl restart  postgresql
```

Laravel用のユーザはパスワードを利用する(md5）ように設定
これは host all などとある行よりも上に書く必要があるみたい
読み込み順序で上に書いてあるものから評価するのかな？
※ postgresqlの文化がよくわからん...



# 作ったLaravel用ユーザでの接続確認

```bash
$ psql -U lara_user -d lara -h 127.0.0.1
ユーザー lara_user のパスワード:
psql (10.5)
"help" でヘルプを表示します。

lara=# \du
                                               ロール一覧
 ロール名  |                                     属性                                     | 所属グループ
-----------+------------------------------------------------------------------------------+--------------
 lara_user | スーパーユーザー                                                             | {}
 postgres  | スーパーユーザー, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}

lara=# \l
                                          データベース一覧
   名前    |  所有者   | エンコーディング |  照合順序   | Ctype(変換演算子) |     アクセス権限
-----------+-----------+------------------+-------------+-------------------+-----------------------
 lara      | lara_user | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 postgres  | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |           |                  |             |                   | postgres=CTc/postgres
 template1 | postgres  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |           |                  |             |                   | postgres=CTc/postgres
(4 行)

lara=# \q
```

ここで、ちゃんとログインできること


# LaravelでPostgresqlに接続するために php-pgsql をインストール

```bash
$ sudo dnf install -y php-pgsql
============================================================================================================================================
 パッケージ                       アーキテクチャ                バージョン                             リポジトリ                     サイズ
============================================================================================================================================
インストール:
 php-pgsql                        x86_64                        7.2.8-1.fc28                           updates                        142 k

トランザクションの要約
============================================================================================================================================
インストール  1 パッケージ
```


# Laravel で Postgresql に接続する設定

.env ファイルのDB接続設定を書き換え

```bash:.env
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=lara
DB_USERNAME=lara_user
DB_PASSWORD=lara_pass
```


# Laravel でＤＢマイグレーション

Postgresql にテーブルとデータを作成してみる

```sql

$  php artisan migrate:refresh --seed
$ 
$  psql -U lara_user -d lara -h 127.0.0.1
ユーザー lara_user のパスワード:

■テーブル一覧
lara=# \dt
                 リレーション一覧
 スキーマ |      名前       |    型    |  所有者
----------+-----------------+----------+-----------
 public   | csv_slips       | テーブル | lara_user
 public   | migrations      | テーブル | lara_user
 public   | password_resets | テーブル | lara_user
 public   | pay_slips       | テーブル | lara_user
 public   | users           | テーブル | lara_user
(5 行)

lara=#


■テーブル構造
lara=# \d users
                                            テーブル "public.users"
       列       |               型               | 照合順序 | Null 値を許容 |            デフォルト
----------------+--------------------------------+----------+---------------+-----------------------------------
 id             | integer                        |          | not null      | nextval('users_id_seq'::regclass)
 name           | character varying(255)         |          | not null      |
 loginid        | character varying(255)         |          | not null      |
 role           | smallint                       |          | not null      | '10'::smallint
 password       | character varying(255)         |          | not null      |
 remember_token | character varying(100)         |          |               |
 created_at     | timestamp(0) without time zone |          |               |
 updated_at     | timestamp(0) without time zone |          |               |
インデックス:
    "users_pkey" PRIMARY KEY, btree (id)
    "users_loginid_unique" UNIQUE CONSTRAINT, btree (loginid)


■テーブル内容
lara=# select id, name, loginid, created_at
lara-#   from users;
 id |     name      |            loginid             |     created_at
----+---------------+--------------------------------+---------------------
  1 | root管理者    | root                           |
  2 | admin1管理者  | admin1                         |
  3 | admin2管理者  | admin2                         |
  4 | admin3管理者  | admin3                         |
  5 | admin4管理者  | admin4                         |
  6 | 管理者        | admin                          |
  7 | 津田 舞       | tomoya88@example.org           | 2018-08-22 00:58:11
  8 | 吉田 陽一     | koizumi.miki@example.net       | 2018-08-22 00:58:11
  9 | 小泉 真綾     | ehirokawa@example.net          | 2018-08-22 00:58:11
 10 | 若松 健一     | satomi.yamagishi@example.org   | 2018-08-22 00:58:11
 11 | 浜田 結衣     | hkanou@example.net             | 2018-08-22 00:58:11
 12 | 渚 結衣       | ryohei.murayama@example.net    | 2018-08-22 00:58:11
 13 | 木村 あすか   | naoko.ito@example.net          | 2018-08-22 00:58:11
 14 | 村山 淳       | shuhei06@example.org           | 2018-08-22 00:58:11
 15 | 坂本 陽一     | idaka.ryohei@example.org       | 2018-08-22 00:58:11
 16 | 渚 太郎       | tkato@example.org              | 2018-08-22 00:58:11
 17 | 石田 陽一     | harada.taichi@example.org      | 2018-08-22 00:58:11
 18 | 西之園 くみ子 | naoto.yamaguchi@example.com    | 2018-08-22 00:58:11
 19 | 工藤 亮介     | kudo.hideki@example.com        | 2018-08-22 00:58:11
 20 | 笹田 智也     | hanako.kobayashi@example.org   | 2018-08-22 00:58:11
 21 | 中村 明美     | akemi.yoshida@example.org      | 2018-08-22 00:58:11
 22 | 伊藤 春香     | ryohei.nishinosono@example.net | 2018-08-22 00:58:11
 23 | 村山 京助     | satomi.takahashi@example.com   | 2018-08-22 00:58:11
 24 | 中津川 陽子   | jmurayama@example.com          | 2018-08-22 00:58:11
 25 | 中島 裕美子   | nito@example.com               | 2018-08-22 00:58:11
 26 | 山岸 京助     | takuma.kimura@example.net      | 2018-08-22 00:58:11
 27 | 井上 太郎     | kazuya23@example.org           | 2018-08-22 00:58:11
 28 | 高橋 明美     | yamamoto.maaya@example.com     | 2018-08-22 00:58:11
 29 | 鈴木 舞       | momoko.harada@example.com      | 2018-08-22 00:58:11
 30 | 小泉 智也     | tsuda.haruka@example.com       | 2018-08-22 00:58:11
 31 | 吉本 さゆり   | ryohei.aota@example.net        | 2018-08-22 00:58:11
 32 | 加藤 里佳     | yamada.rika@example.org        | 2018-08-22 00:58:11
 33 | 山岸 修平     | kyosuke94@example.org          | 2018-08-22 00:58:11
 34 | 浜田 幹       | ksasaki@example.net            | 2018-08-22 00:58:11
 35 | 青田 陽子     | kaori.koizumi@example.com      | 2018-08-22 00:58:11
 36 | 加納 千代     | tsuda.tomoya@example.net       | 2018-08-22 00:58:11
(36 行)

```




-------------------------------------
以上
fedora28 に Postgresql をインストールして Laravel5.6 から接続できました