RHEL9のAppStreamに収録されているのはPostgreSQL 13系、Ubuntu 22.04には14系と、現時点では2世代~3世代古いバージョンがデフォルトです。かといって、ソースからビルドするのは運用コストが高すぎる。
この記事では、postgresql インストール linux pgdg の正攻法として、PostgreSQL公式のPGDGリポジトリを使ってRHEL9/Rocky Linux 9とUbuntu 24.04 LTSに最新版を導入する手順を解説します。initdbによるデータベースクラスタの初期化、systemctlでのサービス起動・自動起動設定、そして初回接続に欠かせない初期ロール設定(pg_hba.conf)まで、「繋がる状態」まで一気に持っていきます。
この記事のポイント
・PGDGリポジトリを使えばLinuxに最新版PostgreSQLを導入できる
・RHEL9系はdnf module disable postgresqlの実行が必須
・Ubuntu 24.04 LTSはインストール後に自動でクラスタ初期化される
・pg_hba.confを編集してパスワード認証を有効化する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
PGDGリポジトリとは何か・なぜ公式パッケージを使うのか
PostgreSQL Global Development Group(PGDG)は、PostgreSQLの開発を担うコアコミッターらの団体です。PGDGリポジトリとは、その公式チームが提供するRPM(RHEL系)・DEB(Debian/Ubuntu系)パッケージの配布元を指します。
OSのデフォルトリポジトリではなくPGDGリポジトリを使うべき理由は大きく3つあります。
・最新版を常時提供:PostgreSQLの新しいメジャーバージョンはリリース直後からPGDGリポジトリに登録されます。RHEL9のAppStreamはOS本体のライフサイクルに縛られるため、更新が大幅に遅れます。
・複数バージョンの共存:postgresql16-server、postgresql17-server のように版数ごとにパッケージが分離されており、テスト環境と本番環境で異なるバージョンを同じホストで共存させられます。
・セキュリティパッチが迅速:CVEが公表されると、PGDGはほぼ同日にパッチ済みパッケージをリリースします。OS標準リポジトリへの反映を待つ必要がありません。
「なぜわざわざリポジトリを追加するのか」という疑問が出ることがありますが、PostgreSQLを本番利用するなら初めからPGDGリポジトリを使うのが業界標準です。20年以上Linuxサーバーを運用してきた経験から言っても、OS同梱のPostgreSQLをそのまま本番に使っているケースは少数派です。
前提条件と動作確認済み環境
この記事の手順は次の環境で動作確認しています。
・RHEL9.4 / Rocky Linux 9.4(x86_64)、PostgreSQL 17
・Ubuntu 24.04 LTS(x86_64)、PostgreSQL 17
共通の前提条件:
・sudo実行権限を持つユーザーでログインしていること
・サーバーがdownload.postgresql.orgへHTTPSアクセスできること
・PostgreSQLのデフォルトポート(5432番)を使用
バージョン番号「17」は 16 や 18 に読み替えて同様の手順で導入できます。インストールするバージョンに合わせてパス・サービス名の数字を変えてください。
RHEL9/Rocky Linux 9へのPostgreSQLインストール手順
RHEL9系でPGDGリポジトリからPostgreSQLをインストールする際、最大の落とし穴は「OSに内蔵されたPostgreSQLモジュールを先に無効化しないと、PGDG版ではなくOS版がインストールされてしまう」点です。この手順を必ず守ってください。
1. PGDGリポジトリRPMの登録
PostgreSQL公式サイトが提供するリポジトリ設定RPMをインストールします。
# PGDGリポジトリRPMをインストール sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
このRPMをインストールすると、/etc/yum.repos.d/ 配下にpgdg*.repoファイルが追加され、dnfがPGDGリポジトリを参照できるようになります。
2. OS標準PostgreSQLモジュールの無効化
RHEL9/Rocky Linux 9にはAppStreamという仕組みがあり、PostgreSQLが「モジュール」として登録されています。このモジュールを無効化しないと、dnfはPGDG版ではなくAppStream版を優先してインストールしてしまいます。
# AppStreamのPostgreSQLモジュールを無効化(必須) sudo dnf -qy module disable postgresql
このステップを省略すると、PGDG版の最新PostgreSQLではなく、OS同梱の古いバージョンがインストールされるため、必ず実行してください。
3. postgresql17-serverのインストール
モジュールを無効化した後、PGDG版のPostgreSQL 17をインストールします。
# PostgreSQL 17 サーバーパッケージのインストール sudo dnf install -y postgresql17-server # インストール確認(rpmで版数を確認) rpm -q postgresql17-server # 出力例: postgresql17-server-17.4-1PGDG.rhel9.x86_64
パッケージ名が「PGDG.rhel9」を含んでいれば、OS同梱版ではなくPGDG版が正しくインストールされています。rpm コマンドの使い方も合わせて確認しておきましょう。
リナックスマスター.JP セミナーを見る >>
Ubuntu 24.04 LTSへのPostgreSQLインストール手順
Ubuntu 24.04 LTSでは、Ubuntuの標準リポジトリにも postgresql パッケージが含まれています。PGDGの公式APTリポジトリを追加することで、OS標準より新しいバージョンをインストールできます。
1. 必要パッケージとPGDG署名キーの追加
PGDGのAPTリポジトリを安全に使うために、まず署名用のGPGキーをインポートします。
# curl と ca-certificates をインストール sudo apt install -y curl ca-certificates # 鍵格納ディレクトリの作成 sudo install -d /usr/share/postgresql-common/pgdg # PGDGの公式GPGキーをダウンロード sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
2. PGDGリポジトリの登録
# /etc/apt/sources.list.d/pgdg.list にリポジトリを追加 sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list' # 追加されたことを確認 cat /etc/apt/sources.list.d/pgdg.list # 出力例: deb [signed-by=...] https://apt.postgresql.org/pub/repos/apt noble-pgdg main
3. postgresql-17のインストール
# パッケージリストを更新してインストール sudo apt update sudo apt -y install postgresql-17 # インストール完了後のサービス確認 sudo systemctl status postgresql@17-main
Ubuntuでは postgresql-17 パッケージのインストール時に、自動でinitdb(データベースクラスタの初期化)とサービスの起動まで実行されます。RHEL9系のように手動でinitdbを実行する必要はありません。
initdbとデータベースクラスタの初期化
この手順はRHEL9/Rocky Linux 9のみ必要です。Ubuntuの場合はパッケージインストール時に自動で実行されているため読み飛ばしてください。
initdbとは、PostgreSQLがデータを格納するディレクトリ構造(データベースクラスタ)を初期化するコマンドです。この処理が完了して初めてPostgreSQLを起動できる状態になります。
# PGDG提供のinitdbスクリプトを実行(RHEL9系のみ) sudo /usr/pgsql-17/bin/postgresql-17-setup initdb # 実行結果 # Initializing database ... OK
初期化が完了すると /var/lib/pgsql/17/data/ 配下にデータベースクラスタが作成されます。このディレクトリには設定ファイル(postgresql.conf、pg_hba.conf)とデータファイルの両方が格納されます。
注意点として、一度initdbを実行したディレクトリに対して再度initdbを実行しようとすると「Is a PostgreSQL data directory」というエラーが出ます。既存クラスタがある場合は削除してから再実行するか、別のディレクトリを指定してください。
PostgreSQLサービスの起動と自動起動設定
initdb完了後(Ubuntu は既に起動済み)、systemctlでサービスを制御します。
# RHEL9/Rocky Linux 9 の場合 # 自動起動を有効化 sudo systemctl enable postgresql-17 # サービスを起動 sudo systemctl start postgresql-17 # 起動状態の確認 sudo systemctl status postgresql-17
# Ubuntu 24.04 LTS の場合 # 自動起動を有効化(インストール時に自動有効化済みの場合が多い) sudo systemctl enable postgresql@17-main # 起動状態の確認 sudo systemctl status postgresql@17-main
正常起動時の出力例(RHEL9系):
* postgresql-17.service - PostgreSQL 17 Database Server Loaded: loaded (/usr/lib/systemd/system/postgresql-17.service; enabled; preset: disabled) Active: active (running) since Thu 2026-08-14 14:22:10 JST; 5s ago Process: 12341 ExecStartPre=/usr/pgsql-17/bin/postgresql-17-check-db-dir (code=exited, status=0/SUCCESS) Main PID: 12345 (postmaster) Tasks: 7 (limit: 23292) Memory: 28.2M CPU: 98ms CGroup: /system.slice/postgresql-17.service |-12345 /usr/pgsql-17/bin/postmaster -D /var/lib/pgsql/17/data/
Active: active (running) と表示されていれば起動成功です。
初期ロール設定(postgres ユーザー・パスワード設定・pg_hba.conf)
PostgreSQLをインストールした直後は、管理者ロール「postgres」にパスワードが設定されておらず、OS上のpostgresユーザーでしかアクセスできません。実際の運用に向けて、パスワード認証を有効にしておきましょう。
1. postgresロールのパスワード設定
# OSのpostgresユーザーとしてpsqlに接続 sudo -u postgres psql # PostgreSQLプロンプトが表示される # psql (17.4) # Type "help" for help. # postgres=# # postgresロールにパスワードを設定(SQL文を実行) postgres=# ALTER USER postgres WITH PASSWORD '任意の強固なパスワード'; ALTER ROLE # psqlを終了 postgres=# \q
パスワードは英数字・記号を混在させた12文字以上を推奨します。このパスワードは後ほどTCP接続時に使用します。
2. pg_hba.confの認証方式を変更
pg_hba.conf は「誰がどの経路でどのDBに接続する場合に、どの認証方式を使うか」を定義するファイルです。デフォルトでは同一OS上のユーザーにはpeer認証(パスワード不要)が使われており、TCP/IP経由のパスワード認証は有効になっていません。
pg_hba.confのパス:
・RHEL9/Rocky Linux 9:/var/lib/pgsql/17/data/pg_hba.conf
・Ubuntu 24.04 LTS:/etc/postgresql/17/main/pg_hba.conf
# RHEL9の場合(viやnanoで編集) sudo vi /var/lib/pgsql/17/data/pg_hba.conf # Ubuntu 24.04 LTSの場合 sudo vi /etc/postgresql/17/main/pg_hba.conf
ファイル末尾付近にある接続ルールを以下のように変更します。
変更前(デフォルト):
# TYPE DATABASE USER ADDRESS METHOD local all all peer host all all 127.0.0.1/32 ident host all all ::1/128 ident
変更後(パスワード認証を有効化):
# TYPE DATABASE USER ADDRESS METHOD local all all scram-sha-256 host all all 127.0.0.1/32 scram-sha-256 host all all ::1/128 scram-sha-256
scram-sha-256はPostgreSQL 10以降で利用可能なセキュアな認証方式です。旧来のmd5より安全性が高く、新規構築の場合はscram-sha-256を推奨します。
編集後、サービスを再起動して設定を反映します。
# RHEL9/Rocky Linux 9 sudo systemctl restart postgresql-17 # Ubuntu 24.04 LTS sudo systemctl restart postgresql@17-main
接続確認とよくあるトラブルシューティング
設定完了後、psqlコマンドでTCP経由の接続を確認します。
1. 接続確認コマンド
# TCP経由でpostgresロールに接続(-hで127.0.0.1を指定するとTCP接続になる) psql -U postgres -h 127.0.0.1 -p 5432 # パスワード入力後、接続成功時の出力例 Password for user postgres: psql (17.4) Type "help" for help. postgres=# SELECT version(); version --------------------------------------------------------------------------------------------------------- PostgreSQL 17.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1 20231218 (Red Hat 11.4.1-3), 64-bit (1 row) postgres=# \q
SELECT version() の結果に「PGDG.rhel9」や「Ubuntu」の文字列が含まれていれば、PGDGリポジトリから正しくインストールされたことが確認できます。
5432番ポートの待ち受け状態は ss コマンドでも確認できます。Linux ポート確認の全コマンドも参照してください。
# 5432番ポートの待ち受け確認 ss -tlnp | grep 5432 # 出力例: LISTEN 0 128 0.0.0.0:5432 0.0.0.0:* users:(("postmaster",pid=12345,fd=5))
2. よくあるエラーと対処法
「FATAL: password authentication failed for user "postgres"」
pg_hba.confの認証方式がまだpeer/identのままになっている可能性があります。設定ファイルを再確認し、サービスを再起動してください。
「could not connect to server: Connection refused」
サービスが起動していないか、5432番ポートで待ち受けていません。
sudo systemctl status postgresql-17(またはpostgresql@17-main)でサービス状態を確認し、エラーログ(/var/lib/pgsql/17/data/log/ 配下)を調べてください。
「FATAL: data directory "/var/lib/pgsql/17/data" has wrong ownership」
データディレクトリの所有者がpostgresユーザーになっていません。
sudo chown -R postgres:postgres /var/lib/pgsql/17/data を実行して権限を修正してください。
「initdb: error: directory "/var/lib/pgsql/17/data" exists but is not empty」
initdbを2回実行しようとしたときに出るエラーです。既にクラスタが初期化されている場合は再実行不要です。データを完全に初期化し直したい場合はディレクトリを空にしてから再実行してください。
ファイアウォールの設定(外部からアクセスする場合)
同一サーバー内のアプリケーションからのみ接続する場合は不要ですが、別のPCやサーバーからPostgreSQLに接続する場合はファイアウォールで5432番ポートを開放する必要があります。
# RHEL9/Rocky Linux 9 の場合(firewalld) sudo firewall-cmd --add-port=5432/tcp --permanent sudo firewall-cmd --reload # Ubuntu 24.04 LTS の場合(ufw) sudo ufw allow 5432/tcp
まとめ・次のステップ
PGDGリポジトリを使ったLinuxへのPostgreSQLインストール手順をまとめます。
| OS | 手順 | 備考 |
|---|---|---|
| RHEL9/Rocky Linux 9 | dnf install pgdg-redhat-repo-latest.noarch.rpm |
リポジトリRPM登録 |
| RHEL9/Rocky Linux 9 | dnf -qy module disable postgresql |
AppStreamモジュール無効化(必須) |
| RHEL9/Rocky Linux 9 | dnf install -y postgresql17-server |
サーバーパッケージのインストール |
| RHEL9/Rocky Linux 9 | /usr/pgsql-17/bin/postgresql-17-setup initdb |
DBクラスタの初期化 |
| Ubuntu 24.04 LTS | apt install -y postgresql-17 |
initdb+起動まで自動実行 |
| 両OS共通 | ALTER USER postgres WITH PASSWORD '...' ; |
postgresロールにパスワード設定 |
| 両OS共通 | pg_hba.confをscram-sha-256に変更 | パスワード認証の有効化 |
PGDGリポジトリを使えば、OSの制約を受けずに最新版のPostgreSQLを導入できます。RHEL9系で唯一ハマりやすい「AppStreamモジュールの無効化忘れ」さえ抑えておけば、手順自体はシンプルです。
次のステップとしては、以下を検討してください。
・postgresql.confでmax_connectionsやshared_buffersを本番向けにチューニングする
・アプリケーション専用のロール・データベースを作成し、postgresロールへの直接アクセスを制限する
・pg_dump/pg_dumpallによる定期バックアップ設定
・ログ出力設定(log_statement、log_duration)で実行クエリを記録する
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:MySQLで指定したカラム名を持つテーブルを検索する|information_schemaを使ったDB横断検索
- この記事の属するカテゴリ:データーベース管理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます