Linux PostgreSQL インストール方法による相違点

Linux環境において、アプリケーションのインストール方法は
大きくは標準リポジトリとそれ以外からの２種類あります。

PostgreSQLにおいても、標準リポジトリからインストールしたり
標準リポジトリにないバージョンの場合は、異なるリポジトリからやHPからファイルをダウンロードなどでインストールします。

ただ、標準リポジトリからインストールした場合とそれ以外では
環境に差異があるため、検証したいと思います。

# 検証環境
Miracle Linux 9.2
PostgreSQL 13 ※Linux 9系の標準バージョン
インストールするアプリはサーバとクライアント

# 標準リポジトリからインストール

#### クライアント	インストール

    dnf install postgresql

#### サーバーインストール
	dnf install postgresql-server

#### データベースクラスタの作成
	initdb --encoding=UTF8 --no-locale

↓実行結果
成功しました。以下のようにしてデータベースサーバを起動することができます:
pg_ctl -D /var/lib/pgsql/data -l ログファイル start

データベースクラスタの場所は
/var/lib/pgsql/data
になります。
ディレクトリ名にバージョン番号はありません。

#### 起動する。
    systemctl start postgresql
#### ステータス確認
    systemctl status postgresql
↓結果
● postgresql.service - PostgreSQL database server
Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; preset: disabled)
Active: active (running) since Tue 2024-12-17 23:19:53 JST; 49s ago
Process: 34352 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, s>
Main PID: 34354 (postmaster)
Tasks: 8 (limit: 10979)
Memory: 16.7M
CPU: 67ms
CGroup: /system.slice/postgresql.service
tq34354 /usr/bin/postmaster -D /var/lib/pgsql/data

実行ファイルのパスは/usr/binになっている。

# 手動インストール
必要なファイルは以下３つ
・ライブラリ
postgresql13-libs-13.15-1PGDG.rhel9.x86_64.rpm  
・クライアント
postgresql13-13.15-1PGDG.rhel9.x86_64.rpm  
・サーバ
postgresql13-server-13.15-1PGDG.rhel9.x86_64.rpm 

#### ダウンロードする

    wget --no-check-certificate https://download.postgresql.org/pub/repos/yum/13/redhat/rhel-9.2-x86_64/postgresql13-libs-13.15-1PGDG.rhel9.x86_64.rpm  
	wget --no-check-certificate https://download.postgresql.org/pub/repos/yum/13/redhat/rhel-9.2-x86_64/postgresql13-13.15-1PGDG.rhel9.x86_64.rpm  
	wget --no-check-certificate https://download.postgresql.org/pub/repos/yum/13/redhat/rhel-9.2-x86_64/postgresql13-server-13.15-1PGDG.rhel9.x86_64.rpm 

#### インストールする	
	rpm -Uvh postgresql13-libs-13.15-1PGDG.rhel9.x86_64.rpm  
	rpm -Uvh postgresql13-13.15-1PGDG.rhel9.x86_64.rpm  
	rpm -Uvh postgresql13-server-13.15-1PGDG.rhel9.x86_64.rpm 

#### データベースクラスタの作成
    initdb --encoding=UTF8 --no-locale

↓実行結果
[postgres@localhost ~]$ initdb --encoding=UTF8 --no-locale
bash: initdb: command not found...
失敗します。
実行ファイルが見つからないので、パスが通っていません。

#### binディレクトリ確認
    rpm -ql postgresql13 | grep /bin/

↓結果

    rpm -ql postgresql13 | grep /bin/
    /usr/pgsql-13/bin/clusterdb

以下省略
/usr/pgsql-13/bin　ということがわかります

パスを通す

    PATH=/usr/pgsql-13/bin:$PATH

再実行

    initdb --encoding=UTF8 --no-locale

↓結果
成功しました。以下のようにしてデータベースサーバを起動することができます:
pg_ctl -D /var/lib/pgsql/13/data -l ログファイル start

成功しました。
データディレクトリは/var/lib/pgsql/13/data　になります。

#### 起動する。
    systemctl start postgresql
#### ステータス確認
    systemctl status postgresql
↓結果
● postgresql-13.service - PostgreSQL 13 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-13.service; disabled; preset: disabled)
Active: active (running) since Sun 2024-12-22 11:19:17 JST; 1min 44s ago
Docs: https://www.postgresql.org/docs/13/static/
Process: 3036 ExecStartPre=/usr/pgsql-13/bin/postgresql-13-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 3041 (postmaster)
Tasks: 8 (limit: 10979)
Memory: 16.5M
CPU: 100ms
CGroup: /system.slice/postgresql-13.service
tq3041 /usr/pgsql-13/bin/postmaster -D /var/lib/pgsql/13/data/

#### まとめ
標準インストール時
binディレクトリは　/usr/bin/psql
パスは通っているのでコマンドは実行可能
データディレクトリは　/var/lib/pgsql/data

手動インストール時
binディレクトリは　/usr/pgsql-13/bin
パスは通っていないので環境変数の設定が必要
データディレクトリは　/var/lib/pgsql/13/data/

となります。

標準インストールにはバージョン番号がありません。
これは、標準リポジトリで保障されるバージョンは固定されているため
バージョンアップの想定が不要だからと思われます。
例えばRHELの標準リポジトリの場合、OSのサポート期間内であれば
PostgreSQLのサポートが終了してもセキュリティパッチの適用がされます。

手動インストールの場合はディレクトリ名にバージョン番号が入るため
バージョンアップ時もディレクトリ構成を維持したまま作業が可能です。
反対に、OS側のセキュリティパッチの補償対象外になるため
PostgreSQLのサポート期間に準じます。

利用においてはOSに合わせた運用でバージョンアップを意識しないのであれば
標準リポジトリからインストールするほうが運用上は楽でしょう。
逆にバージョンアップを想定する場合は
手動インストールが良いと思います。