Oracle Linux 9 に PostgreSQL 16 をインストールする 4 ステップ

## はじめに
Oracle Linux 9 (OL9) に dnf module を利用して、PostgreSQL をインストールします。

## Step 1. モジュールで PostgreSQL 16 をインストールする
モジュールでインストール可能なPostgreSQLを確認します。
以下の例では、PostgreSQL 15 と PostgreSQL 16 がインストール可能です。 

```shell-session
# dnf module list postgresql

Oracle Linux 9 Application Stream Packages (x86_64)
Name                  Stream           Profiles                     Summary                                      

postgresql            15               client, server [d]           PostgreSQL server and client module          

postgresql            16               client, server [d]           PostgreSQL server and client module          
```

PostgreSQL 16 をインストールします。

```shell-session
[root@OL9 ~]# dnf module install postgresql:16
依存関係が解決しました。
=================================================================================================================
 パッケージ                    Arch         バージョン                                 リポジトリー        サイズ
=================================================================================================================

group/moduleパッケージをインストール:
 postgresql-server             x86_64       16.1-1.module+el9.4.0+90259+3ab83788       ol9_appstream 
     7.2 M
依存関係のインストール:
 postgresql                    x86_64       16.1-1.module+el9.4.0+90259+3ab83788       ol9_appstream  
     2.1 M
 postgresql-private-libs       x86_64       16.1-1.module+el9.4.0+90259+3ab83788       ol9_appstream  
     141 k
モジュールプロファイルのインストール中:
 postgresql/server                                                                                              
モジュールストリームの有効化中:
 postgresql                                 16                                                                  

トランザクションの概要
=================================================================================================================

インストール  3 パッケージ

ダウンロードサイズの合計: 9.5 M
インストール後のサイズ: 37 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
（省略）
インストール済み:
  postgresql-16.1-1.module+el9.4.0+90259+3ab83788.x86_64
  postgresql-private-libs-16.1-1.module+el9.4.0+90259+3ab83788.x86_64
  postgresql-server-16.1-1.module+el9.4.0+90259+3ab83788.x86_64
完了しました!

```

## Step 2. PostgreSQL 16 の初期セットアップをします。
インストールした時点で postgre ユーザの追加等は行われています。
さらに起動するに初期セットアップを行います。

```shell-session
[root@OL9 ~]# postgresql-setup --initdb --unit postgresql
 * Initializing database in '/var/lib/pgsql/data'
 * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
```

## Step 3. PostgreSQL 16 を起動します。
systemctl を経由して PostgreSQL 16 を起動します。

```shell-session
[root@OL9 ~]# systemctl enable --now postgresql
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.
```

## Step 4. firewall の設定を変更します。
firewall が有効になっている場合、ポートの設定を追加します。

firewalld サービスを確認します。

```shell-session
[root@OL9 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled)
     Active: active (running) since Sun 2024-05-12 12:18:34 JST; 16min ago
       Docs: man:firewalld(1)
   Main PID: 657 (firewalld)
      Tasks: 2 (limit: 9317)
     Memory: 42.8M
        CPU: 729ms
     CGroup: /system.slice/firewalld.service
             └─657 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid

 5月 12 12:18:30 OL9 systemd[1]: Starting firewalld - dynamic firewall daemon...
 5月 12 12:18:34 OL9 systemd[1]: Started firewalld - dynamic firewall daemon.
```

```shell-session
[root@OL9 ~]# firewall-cmd --add-service=postgresql
success
[root@OL9 ~]# firewall-cmd --runtime-to-permanent
success
```
## 補足
pgbench はインストールされたないため、追加で以下のパッケージのインストールが必要になります。
```shell-session
[root@OL9 usr]# dnf install postgresql-contrib
```