第4章 PostgreSQL の使用
PostgreSQL サーバーは、SQL 言語をベースにした、オープンソースの堅牢かつ拡張性に優れたデータベースサーバーです。PostgreSQL サーバーは、オブジェクトリレーショナルデータベースシステムを提供します。これにより、広範なデータセットと多数の同時ユーザーを管理できます。このような理由から、PostgreSQL サーバーは、大量のデータを管理するためにクラスターで使用できます。
PostgreSQL サーバーには、データの整合性の確保、耐障害性のある環境やアプリケーションの構築を行うための機能が含まれます。PostgreSQL サーバーを使用すると、データベースを再コンパイルすることなく、独自のデータ型、カスタム関数、またはさまざまなプログラミング言語のコードでデータベースを拡張できます。
RHEL システムに PostgreSQL をインストールして設定する方法、PostgreSQL データをバックアップする方法、および PostgreSQL の以前のバージョンから移行する方法について説明します。
4.1. PostgreSQL のインストール
RHEL 9.0 は、この Application Stream の初期バージョンとして PostgreSQL 13 を提供します。これは、RPM パッケージとして簡単にインストールできます。
RHEL 9 のマイナーリリースで、ライフサイクルがより短い追加の PostgreSQL バージョンが、モジュールとして提供されます。
-
RHEL 9.2 で、PostgreSQL 15 が
postgresql:15
モジュールストリームとして導入されました。 -
RHEL 9.4 で、PostgreSQL 16 が
postgresql:16
モジュールストリームとして導入されました。
PostgreSQL をインストールするには、以下の手順に従います。
設計上、同じモジュールの複数のバージョン (ストリーム) を並行してインストールすることはできません。したがって、postgresql
モジュールから利用可能なストリームのいずれかを選択する必要があります。コンテナー内では、別々のバージョンの PostgreSQL データベースサーバーを使用できます。コンテナー内で複数の PostgreSQL バージョンを実行する を参照してください。
手順
PostgreSQL サーバーパッケージをインストールします。
PostgreSQL 13 の場合は、RPM パッケージからインストールします。
# dnf install postgresql-server
PostgreSQL 15 または PostgreSQL 16 の場合は、
postgresql
モジュールからストリーム (バージョン) 15 または 16 を選択し、server
プロファイルを指定します。以下に例を示します。# dnf module install postgresql:16/server
postgres
のスーパーユーザーが自動的に作成されます。
データベースクラスターを初期化します。
# postgresql-setup --initdb
Red Hat は、デフォルトの
/var/lib/pgsql/data
ディレクトリーにデータを保存することを推奨します。postgresql
サービスを開始します。# systemctl start postgresql.service
postgresql
サービスが、システムの起動時に起動するようにします。# systemctl enable postgresql.service
RHEL 9 内の以前の postgresql
ストリームからアップグレードする場合は、後続のストリームへの切り替え と RHEL 9 バージョンの PostgreSQL への移行 の両方の手順に従ってください。
4.1.1. コンテナー内で複数の PostgreSQL バージョンを実行する
同じホスト上で別々のバージョンの PostgreSQL を実行するには、コンテナー内で実行してください。同じモジュールの複数のバージョン (ストリーム) を並行してインストールすることはできないためです。
この手順では、例として PostgreSQL 13 と PostgreSQL 15 を記載していますが、Red Hat Ecosystem Catalog で利用可能な任意の PostgreSQL コンテナーバージョンを使用できます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
Red Hat カスタマーポータルアカウントを使用して、
registry.redhat.io
レジストリーに認証します。# podman login registry.redhat.io
すでにコンテナーレジストリーにログインしている場合は、このステップをスキップしてください。
コンテナー内で PostgreSQL 13 を実行します。
$ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_1>:5432 rhel9/postgresql-13
このコンテナーイメージを使用する方法の詳細は、Red Hat Ecosystem Catalog を参照してください。
コンテナー内で PostgreSQL 15 を実行します。
$ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_2>:5432 rhel9/postgresql-15
このコンテナーイメージを使用する方法の詳細は、Red Hat Ecosystem Catalog を参照してください。
コンテナー内で PostgreSQL 16 を実行します。
$ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_3>:5432 rhel9/postgresql-16
このコンテナーイメージを使用する方法の詳細は、Red Hat Ecosystem Catalog を参照してください。
注記2 つのデータベースサーバーのコンテナー名とホストポートが異なっている必要があります。
クライアントがネットワーク上のデータベースサーバーにアクセスできるように、ファイアウォールでホストポートを開きます。
# firewall-cmd --permanent --add-port={<host_port_1>/tcp,<host_port_2>/tcp,<host_port_3>/tcp,...} # firewall-cmd --reload
検証手順
実行中のコンテナーに関する情報を表示します。
$ podman ps
データベースサーバーに接続し、root としてログインします。
# psql -u postgres -p -h localhost -P <host_port> --protocol tcp