CentOS Stream 9にPostgreSQL 16をdnf経由でインストール

PostgreSQL Serverを開発サーバーにインストールしたときの覚書。

環境: CentOS Stream 9, PostgreSQL 16.0


1. PostgreSQL Serverをインストール

公式サイトを参考に。
参考: PostgreSQL: Linux downloads (Red Hat family)

リポジトリを検索。
# dnf search postgresql
# dnf info postgresql-server

v13.11だった。
モジュールリストにあるか確認。
# dnf module list postgresql

CentOS Stream 9 - AppStream
Name                       Stream                Profiles                          Summary
postgresql                 15                    client, server [d]                PostgreSQL server and client module
postgresql                 16                    client, server [d]                PostgreSQL server and client module

あったのでモジュールからインストールする。
# dnf module install postgresql:16

データベース初期化。サービスの名前を確認して自動起動オンにして起動。
# postgresql-setup --initdb
# systemctl list-unit-files -t service
# systemctl enable postgresql
# systemctl start postgresql
# systemctl status postgresql

設定ファイル確認。
# cd /var/lib/pgsql/data
# less postgresql.conf


2. Windowsからネットワーク経由で接続

postgresユーザーの接続パスワード設定。
# su - postgres
$ psql

ユーザー一覧とデータベース一覧表示。
# \du
# \l

パスワード変更。
# alter role postgres with password 'pass';
# quit

rootに戻ってファイヤーウォールの確認。
# systemctl status firewalld
# firewall-cmd --state
# firewall-cmd --list-all --permanent

services: dhcpv6-client http https samba ssh

5432のポートが開いてない。
ファイヤーウォールの登録サービス確認。
# firewall-cmd --get-services

ファイヤーウォールの定義ファイルも一応確認(ポートが5432になっているか)。
# ls /usr/lib/firewalld/services/
# less /usr/lib/firewalld/services/postgresql.xml

追加して再読み込み(再起動は不要)。
# firewall-cmd --add-service=postgresql --permanent
# firewall-cmd --reload

ファイヤーウォールの確認。
# firewall-cmd --list-all --permanent

services: dhcpv6-client http https postgresql samba ssh

PostgresSQL設定でLAN内からのアクセスを許可する。
参考: PostgreSQL: Documentation: 16: 21.1. The pg_hba.conf File
# less /var/lib/pgsql/data/pg_hba.conf

# Allow access from LAN
host    all             all             192.168.10.0/24         scram-sha-256

PostgreSQLの待ち受けポート設定も変更。
# less /var/lib/pgsql/data/postgresql.conf

listen_addresses = '*'

PostgreSQL再起動して確認。
# systemctl restart postgresql
# systemctl status postgresql

CentOS自体のポート待ち受け状態確認。
# ss -atn | grep 5432

LISTEN 0      200           0.0.0.0:5432        0.0.0.0:*
LISTEN 0      200              [::]:5432           [::]:*

5432のポートが開いていて待ち受け状態になっている。

WindowsのDBeaverから接続する。
もし接続できないならPowerShellでtelnetを打ってみる。
PS> telnet vm-dev1 5432

ちなみに本番環境はpgAdminを設定するのでポートを開ける必要はない。


【関連記事】