PostgreSQLをPGDGリポジトリからLinuxへ導入する手順|initdbとサービス起動・初期ロール設定まで

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtipsデーターベース管理 > PostgreSQLをPGDGリポジトリからLinuxへ導入する手順|initdbとサービス起動・初期ロール設定まで
「LinuxサーバーにPostgreSQLを導入しようとしたら、OSのデフォルトリポジトリにある版が古くて困っている」
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を編集してパスワード認証を有効化する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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 コマンドの使い方も合わせて確認しておきましょう。

現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、20年以上の運用経験を持つ現役エンジニアが基礎から教えます。
リナックスマスター.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)で実行クエリを記録する

現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、PostgreSQLをはじめとするLinuxサーバー管理スキルを体系的に習得したい方は、ぜひリナックスマスター.JP セミナーを確認する >>をご確認ください。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。