Linux に PostgreSQL を入れるには、OS 標準のリポジトリを使う方法と、PostgreSQL 公式のリポジトリ(PGDG)を使う方法の2つがあります。この記事では Rocky Linux 10.2 で両方の手順を試しました。RHEL 10 や AlmaLinux 10 でも同じ手順です。
まず見る(結論)
- OS 標準:
dnf install postgresql-server→postgresql-setup --initdb→systemctl enable --now postgresql。Rocky 10.2 では 16.15 が入った - メジャーバージョンを選びたいなら PGDG。14〜18 を入れられ、マイナーアップデートも早く届く
- インストールしただけではデータベースは作られない。initdb(初期化)を忘れると起動しない
- 最初は
sudo -u postgres psqlで入る。パスワードでの接続は pg_hba.conf を変えてから
OS 標準のリポジトリから入れる
入れられるバージョンを確かめます。
$ dnf list --available 'postgresql*server*'
利用可能なパッケージ
postgresql-server.x86_64 16.15-1.el10_2 appstream
postgresql-server-devel.x86_64 16.15-1.el10_2 appstream
postgresql18-server.x86_64 18.6-1.el10_2 appstream
postgresql18-server-devel.x86_64 18.6-1.el10_2 appstream
RHEL 8・9 系の記事にある dnf module でバージョンを切り替える方法は、10 では使えません。dnf module list postgresql は「表示する一致モジュールはありません」と表示されました。
postgresql-server を入れると、クライアントの postgresql も一緒に入ります。
$ sudo dnf install -y postgresql-server
$ sudo postgresql-setup --initdb
* Initializing database in '/var/lib/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
$ sudo systemctl enable --now postgresql
$ sudo -u postgres psql -c 'SELECT version();'
version
---------------------------------------------------------------------------------------------------------------
PostgreSQL 16.15 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 14.3.1 20251022 (Red Hat 14.3.1-4), 64-bit
(1 行)
データと設定ファイルは /var/lib/pgsql/data にあります。postgresql.conf と pg_hba.conf もここです。
PostgreSQL 公式リポジトリ(PGDG)から入れる
公式のダウンロードページ(Red Hat 系)にある手順です。リポジトリの RPM を入れてから、バージョン番号の付いたパッケージを入れます。
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-10-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ dnf list --available 'postgresql*-server'
postgresql-server.x86_64 16.15-1.el10_2 appstream
postgresql14-server.x86_64 14.24-4PGDG.rhel10.2 pgdg14
postgresql15-server.x86_64 15.19-4PGDG.rhel10.2 pgdg15
postgresql16-server.x86_64 16.15-4PGDG.rhel10.2 pgdg16
postgresql17-server.x86_64 17.11-4PGDG.rhel10.2 pgdg17
postgresql18-server.x86_64 18.6-4PGDG.rhel10.2 pgdg18
初回はリポジトリの GPG 鍵を取り込むか聞かれるので、y で答えます。答えずに終わると repomd.xml GPG signature verification error: Signing key not found で一覧が取れません。
17 を入れる例です。
$ sudo dnf install -y postgresql17-server
$ sudo /usr/pgsql-17/bin/postgresql-17-setup initdb
Initializing database ... OK
$ sudo systemctl enable --now postgresql-17
$ sudo -u postgres psql -c 'SELECT version();'
version
-----------------------------------------------------------------------------------------------------------
PostgreSQL 17.11 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 14.3.1 20251022 (Red Hat 14.3.1-4), 64-bit
(1 行)
プログラムは /usr/pgsql-17/bin に、データは /var/lib/pgsql/17/data に置かれます。サービス名もパッケージ名も 17 付きなので、別のメジャーバージョンと同じマシンに並べて入れられます(ポートは変える必要があります)。
どちらを選ぶか
OS 標準版は OS のサポートと一緒に更新されるので、特定のバージョンにこだわらなければこちらで十分です。PGDG 版は、使いたいメジャーバージョンが OS 標準に無いとき、最新のマイナーリリースをすぐに当てたいときに選びます。同じ日に見た 16 系の最新は、どちらも 16.15 でした。
インストール後にやること
postgres ユーザーで入る
インストール直後は、OS の postgres ユーザーから、同じ名前のデータベースユーザーにパスワードなしで入れます(peer 認証)。
$ sudo -u postgres psql
パスワードを設定して pg_hba.conf を見る
$ sudo -u postgres psql -c "ALTER USER postgres PASSWORD '******';"
ALTER ROLE
OS 標準版の pg_hba.conf は次の設定になっていました。
local all all peer
host all all 127.0.0.1/32 ident
host all all ::1/128 ident
local replication all peer
host replication all 127.0.0.1/32 ident
host replication all ::1/128 ident
host(TCP 接続)の行が ident なので、psql -h 127.0.0.1 -U postgres でパスワードを入れる接続は通りません。パスワード認証にするには ident を scram-sha-256 に書き換え、sudo systemctl reload postgresql で読み直させます。pg_hba.conf は postgres ユーザーしか読めないので、見るときも sudo が要ります。
ほかのマシンから接続させるには、次の3つを設定します。postgresql.conf の listen_addresses(既定は localhost)、pg_hba.conf の接続元ネットワークの行、ファイアウォールの 5432 番です。
Ubuntu と Windows
この2つは実機では試していません。公式のダウンロードページの案内は次のとおりです。
- Ubuntu: OS 標準なら
sudo apt install postgresql。特定のバージョンを入れるなら、公式ページの手順で apt.postgresql.org のリポジトリを足してからpostgresql-18のようにバージョン付きで入れる - Windows: 公式ページから EDB 社のインストーラを入手する。pgAdmin 4 などのツールも同梱されている
インストールできたら、バージョンの確認で入ったバージョンを確かめておきます。