7.4.10. RHEL 8 バージョンの PostgreSQL への移行
すでに RHEL 7 上で PostgreSQL を実行していて、データベースソフトウェアを RHEL 8 を実行するホストに移行したい場合は、データベースを移行できます。
Red Hat Enterprise Linux 上で PostgreSQL を使用しているユーザーは、データベースファイルの移行に 2 つの方法を選択できます。
- pg_upgrade ユーティリティーを使用した高速アップグレード
- ダンプおよび復元のアップグレード
高速アップグレードメソッドは、ダンプおよび復元のプロセスよりも速くなります。ただし、場合によっては高速アップグレードが機能せず、ダンプおよび復元プロセスしか使用できない場合があります。そのようなケースには、以下が含まれます。
- アーキテクチャー間のアップグレード
-
plpythonまたはplpython2拡張を使用するシステム。RHEL 8 AppStream リポジトリーにはpostgresql-plpython3パッケージのみが含まれ、postgresql-plpython2パッケージは含まれません。 - Red Hat Software Collections バージョンの PostgreSQL からの移行では、高速アップグレードはサポートされていません。
PostgreSQL の最新バージョンへの移行の前提条件として、すべての PostgreSQL データベースをバックアップしてください。
データベースをダンプし、SQL ファイルのバックアップを実行することは、ダンプおよび復元プロセスで必要であり、高速アップグレードメソッドとして推奨されます。
7.4.10.1. pg_upgrade ユーティリティーを使用した高速アップグレード リンクのコピーリンクがクリップボードにコピーされました!
システム管理者であれば、高速アップグレード方式を使用して PostgreSQL の最新バージョンにアップグレードできます。高速アップグレードを実行するには、バイナリーデータファイルを /var/lib/pgsql/data/ ディレクトリーにコピーし、pg_upgrade ユーティリティーを使用します。
この方法を使用すると、データを移行できます。
- RHEL 7 システム版の PostgreSQL 9.2 から RHEL 8 版の PostgreSQL 10 へ
- RHEL 8 版の PostgreSQL 10 から RHEL 版の PostgreSQL 12 へ
- RHEL 8 版の PostgreSQL 12 から RHEL 版の PostgreSQL 13 へ
- RHEL 版 PostgreSQL 13 から RHEL 版 PostgreSQL 15 へ
- RHEL 版 PostgreSQL 15 から RHEL 版 PostgreSQL 16 へ
RHEL 8 内の以前の PostgreSQL ストリームからアップグレードする場合は、より新しいストリームへの切り替え で説明されている手順に従ってから、PostgreSQL データを移行してください。
RHEL 内の他の PostgreSQL バージョンの組み合わせ間での移行、および Red Hat Software Collections バージョンの PostgreSQL から RHEL への移行には、ダンプとリストアのアップグレードを 使用します。
以下の手順では、高速アップグレード方式を使用して、RHEL 7 システムバージョンの PostgreSQL 9.2 から RHEL 8 バージョンの PostgreSQL に移行する方法について説明します。
前提条件
- PostgreSQL データベースと設定ファイルのバックアップを作成しました。
手順
RHEL 8 システムで、移行するストリーム (バージョン) を有効にします。
# yum module enable postgresql:streamストリームを、選択したバージョンの PostgreSQL サーバーに置き換えてください。
PostgreSQL 10 を提供するデフォルトのストリームを使用する場合は、この手順を省略できます。
RHEL 8 システムで、
postgresql-serverパッケージおよびpostgresql-upgradeパッケージをインストールします。# yum install postgresql-server postgresql-upgradeオプションとして、RHEL 7 で PostgreSQL サーバーモジュールを使用していた場合は、RHEL 8 システムにも 2 つのバージョンでインストールしてください。PostgreSQL 9.2 用にコンパイルされたもの (
postgresql-upgradeパッケージとしてインストール) と、PostgreSQL のターゲットバージョン用にコンパイルされたもの (postgresql-serverパッケージとしてインストール) です。サードパーティー製の PostgreSQL サーバーモジュールをコンパイルする必要がある場合は、postgresql-develパッケージとpostgresql-upgrade-develパッケージの両方に対してビルドしてください。以下の項目を確認します。
-
基本設定 - RHEL 8 システムで、サーバーがデフォルトの
/var/lib/pgsql/dataディレクトリーを使用し、データベースが正しく初期化され、有効になっているかどうかを確認します。さらに、データファイルは、/usr/lib/systemd/system/postgresql.serviceファイルに記載されているパスと同じパスに保存する必要があります。 - PostgreSQL サーバー: システム上で複数の PostgreSQL サーバーを実行できます。これらのすべてのサーバーのデータディレクトリーが独立して処理されていることを確認してください。
-
PostgreSQL サーバーモジュール:RHEL 7 で使用していた PostgreSQL サーバーモジュールが、RHEL 8 システムにもインストールされていることを確認してください。プラグインは
/usr/lib64/pgsql/ディレクトリー (32 ビットシステムの場合は/usr/lib/pgsql/ディレクトリー) にインストールされることに注意してください。
-
基本設定 - RHEL 8 システムで、サーバーがデフォルトの
データのコピー時に、
postgresqlサービスがソースおよびターゲットのシステムで稼働していないことを確認します。# systemctl stop postgresql.service-
データベースファイルをソースの場所から RHEL 8 システムの
/var/lib/pgsql/data/ディレクトリーにコピーします。 PostgreSQL ユーザーとして以下のコマンドを実行して、アップグレードプロセスを実行してください。
# postgresql-setup --upgradeこれでバックグラウンドで
pg_upgradeプロセスが開始します。障害が発生すると、
postgresql-setupは通知のエラーメッセージを提供します。/var/lib/pgsql/data-oldから新規クラスターに、以前の設定をコピーします。高速アップグレードは、新しいデータスタックで以前の設定を再利用せず、設定がゼロから生成されることに注意してください。古い設定と新しい設定を手動で組み合わせたい場合は、データディレクトリーの *.conf ファイルを使用します。
新しい PostgreSQL サーバーを起動します。
# systemctl start postgresql.service新しいデータベースクラスターを分析します。
PostgreSQL 13 以前のバージョンの場合:
su postgres -c '~/analyze_new_cluster.sh'PostgreSQL 15 以降の場合:
su postgres -c 'vacuumdb --all --analyze-in-stages'注記場合によって、
ALTER COLLATION name REFRESH VERSIONを使用する必要があります。詳細は、アップストリームのドキュメント を参照してください。
新しい PostgreSQL サーバーを起動時に自動的に起動させたい場合は、以下を実行してください。
# systemctl enable postgresql.service