AlmaLinuxにPostgreSQLをインストールする手順【標準リポジトリ/PGDG両対応】

AlmaLinuxサーバーにPostgreSQLをインストールし、初期化から外部接続の設定までを行う手順をまとめます。

PostgreSQLのインストール方法は大きく2つあります。

  • OS標準リポジトリ(AppStream)を使う方法:手軽でOSのアップデートと一緒に管理できる
  • PostgreSQL公式リポジトリ(PGDG)を使う方法:新しいバージョンや特定バージョンを選べる

本記事では両方の手順を紹介します。特に理由がなければ標準リポジトリで十分ですが、Laravelなどのフレームワークで新しいバージョンを使いたい場合や、拡張機能(pg_partmanやPGroongaなど)を入れたい場合はPGDGを使うことになります。 <!– FILL: 導入のひとこと(なぜPostgreSQLを入れることになったか等) –>

環境

  • AlmaLinux 10(AlmaLinux 8/9でもほぼ同じ手順です)
  • PostgreSQL 16(標準リポジトリ)/ PostgreSQL 17(PGDG)

方法1:標準リポジトリ(AppStream)からインストール

利用できるバージョンの確認

まず、AppStreamで提供されているバージョンを確認します。

dnf module list postgresql

AlmaLinux 10ではPostgreSQL 16がデフォルトになっています。

インストール

dnf -y install postgresql-server postgresql

postgresql-contrib(追加モジュール集)も入れておくと後々便利です。

dnf -y install postgresql-contrib

データベースの初期化

インストールしただけではまだ使えません。データベースクラスタを初期化します。

postgresql-setup --initdb

データの実体は /var/lib/pgsql/data に作成されます。

サービスの起動と自動起動設定

systemctl enable --now postgresql
systemctl status postgresql

active (running) になっていればOKです。

方法2:PostgreSQL公式リポジトリ(PGDG)からインストール

新しいバージョン(17や18)を使いたい場合はこちらです。

PGDGリポジトリの追加

dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-10-x86_64/pgdg-redhat-repo-latest.noarch.rpm

AlmaLinux 8/9の場合はURLの EL-10 の部分を EL-8EL-9 に読み替えてください。

OS標準モジュールの無効化

AppStream側のPostgreSQLと混ざらないように無効化しておきます。

dnf -qy module disable postgresql

インストール

PostgreSQL 17を入れる場合は次の通りです。

dnf -y install postgresql17-server postgresql17 postgresql17-contrib

データベースの初期化とサービス起動

PGDG版はコマンドやサービス名にバージョン番号が付きます。

/usr/pgsql-17/bin/postgresql-17-setup initdb
systemctl enable --now postgresql-17

データの実体は /var/lib/pgsql/17/data に作成されます。以降の設定ファイルのパスも適宜読み替えてください。

初期設定

postgresユーザーのパスワード設定

PostgreSQLをインストールすると、OSユーザー兼DBスーパーユーザーの postgres が作成されます。まずDB側のパスワードを設定します。

sudo -u postgres psql
ALTER USER postgres WITH PASSWORD 'your-strong-password';
\q

動作確認

sudo -u postgres psql -c "SELECT version();"

バージョン情報が表示されれば正常に動作しています。

アプリケーション用のユーザーとデータベースを作成

スーパーユーザーの postgres を直接アプリで使うのは避け、専用ユーザーを作ります。

sudo -u postgres createuser --pwprompt appuser
sudo -u postgres createdb --owner=appuser appdb

接続確認は次の通りです。

psql -h 127.0.0.1 -U appuser -d appdb

認証設定(pg_hba.conf)

デフォルトではローカル接続が peer 認証(OSユーザー名と一致すれば接続可)になっています。パスワード認証に変えたい場合は pg_hba.conf を編集します。

vi /var/lib/pgsql/data/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     peer
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             ::1/128                 scram-sha-256

認証方式は古い md5 ではなく scram-sha-256 を使うのが現在の推奨です。

編集後は設定を再読み込みします。

systemctl reload postgresql

外部からの接続を許可する場合

同一サーバー内のアプリ(PHPなど)から使うだけなら不要ですが、別サーバーから接続する場合は以下の設定を行います。

postgresql.confの編集

vi /var/lib/pgsql/data/postgresql.conf

listen_addresses を変更します。

listen_addresses = '*'

pg_hba.confに接続元を追加

接続を許可するネットワークを追記します。全開放は避け、必要な範囲だけにしてください。

host    appdb           appuser         192.168.1.0/24          scram-sha-256

firewalldの開放

firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload

設定変更後はサービスを再起動します(listen_addresses の変更はreloadでは反映されません)。

systemctl restart postgresql

別サーバーからの接続確認

psql -h 192.168.1.10 -U appuser -d appdb

つまずきやすいポイント

  • initdbを忘れて起動に失敗するsystemctl start が失敗する場合、まず初期化済みかどうかを確認してください。
  • listen_addressesの変更後にreloadしかしていない:この項目はrestartが必要です。
  • pg_hba.confの評価順:上から順にマッチした行が使われます。広い範囲の行が先にあると、後ろの行は無視されます。
  • PGDG版と標準版のパスの違い:PGDG版はバイナリが /usr/pgsql-17/bin/、データが /var/lib/pgsql/17/data です。標準版の記事を参考にする場合は読み替えが必要です。
  • SELinux:デフォルトのポート・パスで使う分には問題ありませんが、データディレクトリを移動する場合はSELinuxコンテキストの設定が必要になります。

PHPから使う場合

PHPアプリケーションから接続する場合は php-pgsql を入れておきます。

dnf -y install php-pgsql
systemctl restart httpd

<!– FILL: 自分の環境での用途(例:Laravel + PostgreSQLで業務システムを構築する予定、など) –>

まとめ

  • 手軽に入れるならAppStream標準の dnf install postgresql-server
  • 新しいバージョンが必要ならPGDGリポジトリから postgresql17-server など
  • インストール後は initdb → enable –now → パスワード設定 → pg_hba.conf の流れ
  • 外部接続には listen_addressespg_hba.conf・firewalldの3点セットが必要

<!– FILL: 締めのひとこと・関連記事リンク –>

コメント