PostgreSQL 12 min read

PostgreSQLのインストール ― Rocky Linux 10にdnfで入れて起動・接続するまで

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 などのツールも同梱されている

インストールできたら、バージョンの確認で入ったバージョンを確かめておきます。