CentOSにPostgreSQLをソースコードからインストールする

# 経緯
パッケージ管理（yumやapt等）で楽してインストールしたかったのですが、CentOS7.5にソースコードから20年ぶりぐらいにPostgreSQLをインストールする機会があったのでメモ。

# 環境
```shell
# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
```

# 手順
とりあえず以下手順で出来ました。

## アカウントの準備
PostgreSQLを利用するために専用アカウントを準備します。
ホームディレクトリも指定してアカウント名「postgres」を作成します。

```shell
# useradd -m -d /home/postgres postgres
```

パスワードも設定しときます。

```shell
# passwd postgres
ユーザー postgres のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
```


## 必要なツール類の準備
ソースコードを取得したり、コンパイルするために必要なツール類を準備します。
（ここではyumで絶対楽します！）

```shell
# yum -y groupinstall Development Tools
# yum -y install readline-devel
# yum -y install zlib-devel zlib wget vim
```

## PostgreSQLのソースコードを取得
wgetで取得します。
バージョン一覧がオフィシャルなサイトで確認できたので、今回はv12.4を使いました。
[PostgreSQL File Browser](https://www.postgresql.org/ftp/source/)

```shell
# wget https://ftp.postgresql.org/pub/source/v12.4/postgresql-12.4.tar.gz
...
100%[==========================================================>] 27,070,070   564KB/s 時間 72s
2020-09-30 17:46:23 (365 KB/s) - `postgresql-12.4.tar.gz' へ保存完了 [27070070/27070070]
```

## ソースコードの展開
tarで固まってるので柔らかく展開します。

```shell
# tar xvfz postgresql-12.4.tar.gz
...
postgresql-12.4/configure.in
postgresql-12.4/INSTALL
```

## コンパイル作業
展開したソースコードのコンパイル作業。（20年ぶりぐらいの作業で懐かしさを感じます）

```shell
# cd postgresql-12.4
# ./configure
# make
# make install
...
PostgreSQL installation complete.
```

## アカウントの切り替え
インストール作業後、PostgreSQLの操作は先に作ったアカウント「postgres」で行います。

```shell
# exit
login:postgres
Password:
$ 
```

## 環境変数を設定
インストールしたPostgreSQLへのPATHが通ってないので、.bash_profileなど編集し
PATHを通します。

```shell
$ vim .bash_profile
```

編集内容↓

```vim
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH=/usr/local/pgsql/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
```

ログアウト→再度ログインしても良いのですが面倒だったので、sourceで再読み込みします。

```shell
$ source .bash_profile
```

PostgreSQL関係のコマンドがあるか確認してみます。

```shell
$ which psql
/usr/local/pgsql/bin/psql

$ which initdb
/usr/local/pgsql/bin/initdb
```

PATH通ってる～！

## データベースクラスタを作成してみる。
PostgreSQLの場合、最初にデータベースクラスタの作成が必要なのでディレクトリ指定しながら作成します。

```shell
$ initdb -D /home/postgres/data --no-locale
...
Success. You can now start the database server using:
    pg_ctl -D /home/postgres/data -l logfile start

$ ls -l /home/postgres
合計 4
drwx------. 19 postgres postgres 4096  9月 30 18:12 data
```

## データベースクラスタを起動してみる。
作成したデータベースクラスタを指定しPostgreSQLを起動します。

```shell
$ pg_ctl start -D /home/postgres/data
...
 done
server started
$ 
```

## psqlでデータベースに接続しSQL文を叩いてみる！
起動したのでSQL文を試しに叩いてみます。とりあえずpsqlで接続。

```shell
$ psql
psql (12.4)
Type "help" for help.
postgres=#
```

SQL文を入力できそうなのでサクッとお試し入力。

```sql
postgres=# SELECT now();
              now
-------------------------------
 2020-09-30 18:20:14.031968+09
(1 row)
postgres=# \q
$  
```

出来た。久々だ＞PostgreSQL


# まとめ
正直パッケージ管理ツールで準備するのが楽ちんです。
事情によりソースコードからコンパイルする必要が出てきたら、マニュアル見ながら作業するしかないので頑張りましょう！

[第16章 ソースコードからインストール](https://www.postgresql.jp/document/12/html/installation.html)
[psqlドキュメント](https://www.postgresql.jp/document/12/html/app-psql.html)