CentOS7.6にPostgreSQL11.1を入れようとしただけなのに地獄を見た。

この作業フローに辿り着くまで8時間ぐらいかかった。
とてもつらかったので備忘録にした。
自分用なので多分お役に立てない。

# 作りたい環境
▼OS
CentOS7.6

▼ミドルウェア
PostgreSQL11.1

# PostgreSQL 11.1 を yum でインストールするぞ
1.インストール済みのSQLを削除
今回入れ替え作業のため。

```:console
# yum list installed | grep postgres
インストール済みパッケージを確認。

# yum remove postgresql postgresql-libs postgresql-server
インストール済みパッケージの削除。

# userdel -r postgres
作成済みユーザーの削除
```

2.リポジトリの追加
CentOS 7 系の標準リポジトリには、PostgreSQL 11 が入っていないため。

```:console
# yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
PostgreSQL から提供されている公式リポジトリを追加。
```

3.yum info コマンドで確認
念のため。

```:console
# yum info postgresql11-server
利用可能なパッケージ
名前                : postgresql11-server
アーキテクチャー    : x86_64
バージョン          : 11.1
リリース            : 1PGDG.rhel7
容量                : 4.7 M
リポジトリー        : pgdg11/7/x86_64
（以下略）
ちゃんとありました。
```

4.yumインストール実行

```:console
# yum install postgresql11 postgresql11-server
postgresql11-serverも合わせてインストールしておきます。

# psql --version
psql (PostgreSQL) 11.1
バージョン確認。ちゃんと最新ですね。
```

5.自動起動設定

```:console
# systemctl enable postgresql-11
```


6.PostgreSQL の初期化

```:console
# /usr/pgsql-11/bin/postgresql-11-setup initdb
Initializing database ... OK
```

7.PostgreSQL11.1の起動

```:console
# systemctl start postgresql-11
```

8.起動状態を確認

```:console
# systemctl status postgresql-11
● postgresql-11.service - PostgreSQL 11 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disabled)
   Active: active (running) since 〇 〇〇-〇-〇 〇:〇:〇 JST; 9s ago
     Docs: https://www.postgresql.org/docs/11/static/
「Active:active (running)」になってれば動いてます。
```

# PostgreSQL11.1の新規ユーザーとテスト用データベースを作成
1.root からユーザー「postgres」に切り替え

```:console
# su - postgres
PostgreSQLってrootから作業出来ないからね。
```

2.新規ユーザー「user」を作成

```:console
$ createuser --login --pwprompt user
-bash: createuser: コマンドが見つかりません
ゲボ吐くかと思ったけど落ち着いて。

$ su -
一旦rootに戻りまして。

# which createuser
/usr/pgsql-11/bin/createuser
おるやんけcreateuserこの野郎お前、お前この野郎。びっくりさせやがって。

# su - postgres
再度「postgres」へ。

$ /usr/pgsql-11/bin/createuser --login --pwprompt user
新しいロールのためのパスワード:〇〇〇〇
もう一度入力してください：〇〇〇〇
今度は逃がしませんでした。パスワードを設定して控えておきましょう。
```

3.テスト用データベース「TestDB」を作成し、新規ユーザー「user」に紐づけ

```:console
$ /usr/pgsql-11/bin/createdb --owner=user TestDB
こちらもコマンドのディレクトリまで指定して。もう慣れたもんです。
```

4.アクセス制限の設定変更
この作業でパスワードログインが可能になります。なるらしいです。

```:console
$ su -
また一旦rootに戻ります。

# vi /var/lib/pgsql/11/data/pg_hba.conf
pg_hba.confを開き、末尾の方にある

# "local" is for Unix domain socket connections only
local   all      all             peer
この部分を

# "local" is for Unix domain socket connections only
local   all      user            password
local   all      all             peer
こうします。
何をしたかと言うと、「local all user password」を追加しました。
半角スペースで良い感じの位置に調整したんですけど何か意味あるんですかねコレ。

終わったら「:wq」で保存して閉じます。
```

5.PostgreSQL11.1に変更した設定を反映

```:console
# systemctl reload postgresql-11
再読み込みです。これでここまでの設定変更が反映されます。最近覚えました。

※「/var/lib/pgsql/11/data/postgresql.conf」で
　「listen_addresses」や「port」を変更した場合は
# systemctl restart postgresql-11
　の方が良いかもしれない。何故かreloadだと反映されなかった。
```

6.新規ユーザーで、作成したテスト用データベースにログイン可能か確認

```:console
$ psql TestDB user
-bash: psql: コマンドが見つかりません
油断した。

$ /usr/pgsql-11/bin/psql TestDB user
ユーザ user のパスワード:〇〇〇〇←さっき指定したやつ
psql (11.1)
"help" でヘルプを表示します。

TestDB=>
```
やったぜ。

「コマンドが見つかりません」と表示された時に必死でpathを通そうとしたりしてたんですが、別に要らなかったみたいです。

まあ「動く」ってだけなので検証はこれからして行きます。多分。