Linux環境において、アプリケーションのインストール方法は
大きくは標準リポジトリとそれ以外からの2種類あります。
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になっている。
手動インストール
必要なファイルは以下3つ
・ライブラリ
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に合わせた運用でバージョンアップを意識しないのであれば
標準リポジトリからインストールするほうが運用上は楽でしょう。
逆にバージョンアップを想定する場合は
手動インストールが良いと思います。