5.6. PostgreSQL 10 への移行
Red Hat Software Collections 3.2 には PostgreSQL 10 が同梱されており、Red Hat Enterprise Linux 7 でのみ利用できます。rh-postgresql10は、PostgreSQL または PostgreSQL Software Collection のベースの Red Hat Enterprise Linux システムバージョンと並行して、同じマシンに安全にインストールできます。複数のバージョンの PostgreSQL を同時にマシン上で実行することもできますが、別のポートまたは IP アドレスを使用し、SELinux ポリシーを調整する必要があります。以前のバージョンに移行する方法、または Red Hat Enterprise Linux 6 を使用する場合は、「PostgreSQL 9.6 への移行」を参照してください。
rh-postgresql10 Software Collection には、バイナリー、スクリプト、man ページなどのシステム全体のラッパーを提供するパッケージをインストールする rh-postgresql10-syspaths パッケージが含まれます。rh-postgreqsl10*-syspaths パッケージをインストールした後、rh-postgreqsl10* パッケージで提供されるバイナリーやスクリプトが正しく機能するために、ユーザーがscl enableコマンドを使用する必要はありません。*-syspaths パッケージは、ベースの Red Hat Enterprise Linux システムと対応するパッケージと競合することに注意してください。syspaths の詳細は、Red Hat Software Collections Packaging Guide を参照してください。
重要
PostgreSQL 10 に移行する前に、upstream compatibility notes を参照してください。
以下の表は、postgresql パッケージが提供する PostgreSQL の Red Hat Enterprise Linux 7 システムバージョン、ならびに rh-postgresql96 および rh-postgresql10 Software Colection の異なるパスの概要を示しています。
表5.1 PostgreSQL パスの相違点
コンテンツ | postgresql | rh-postgresql96 | rh-postgresql10 |
---|---|---|---|
実行ファイル | /usr/bin/ | /opt/rh/rh-postgresql96/root/usr/bin/ | /opt/rh/rh-postgresql10/root/usr/bin/ |
ライブラリー | /usr/lib64/ | /opt/rh/rh-postgresql96/root/usr/lib64/ | /opt/rh/rh-postgresql10/root/usr/lib64/ |
ドキュメント | /usr/share/doc/postgresql/html/ | /opt/rh/rh-postgresql96/root/usr/share/doc/postgresql/html/ | /opt/rh/rh-postgresql10/root/usr/share/doc/postgresql/html/ |
PDF ドキュメント | /usr/share/doc/postgresql-docs/ | /opt/rh/rh-postgresql96/root/usr/share/doc/postgresql-docs/ | /opt/rh/rh-postgresql10/root/usr/share/doc/postgresql-docs/ |
Contrib ドキュメント | /usr/share/doc/postgresql-contrib/ | /opt/rh/rh-postgresql96/root/usr/share/doc/postgresql-contrib/ | /opt/rh/rh-postgresql10/root/usr/share/doc/postgresql-contrib/ |
ソース | 未インストール | 未インストール | 未インストール |
データ | /var/lib/pgsql/data/ | /var/opt/rh/rh-postgresql96/lib/pgsql/data/ | /var/opt/rh/rh-postgresql10/lib/pgsql/data/ |
バックアップエリア | /var/lib/pgsql/backups/ | /var/opt/rh/rh-postgresql96/lib/pgsql/backups/ | /var/opt/rh/rh-postgresql10/lib/pgsql/backups/ |
テンプレート | /usr/share/pgsql/ | /opt/rh/rh-postgresql96/root/usr/share/pgsql/ | /opt/rh/rh-postgresql10/root/usr/share/pgsql/ |
手順言語 | /usr/lib64/pgsql/ | /opt/rh/rh-postgresql96/root/usr/lib64/pgsql/ | /opt/rh/rh-postgresql10/root/usr/lib64/pgsql/ |
開発ヘッダー | /usr/include/pgsql/ | /opt/rh/rh-postgresql96/root/usr/include/pgsql/ | /opt/rh/rh-postgresql10/root/usr/include/pgsql/ |
他の共有データ | /usr/share/pgsql/ | /opt/rh/rh-postgresql96/root/usr/share/pgsql/ | /opt/rh/rh-postgresql10/root/usr/share/pgsql/ |
リグレッションテスト | /usr/lib64/pgsql/test/regress/ (-test パッケージ内) | /opt/rh/rh-postgresql96/root/usr/lib64/pgsql/test/regress/ (-test パッケージ内) | /opt/rh/rh-postgresql10/root/usr/lib64/pgsql/test/regress/ (-test パッケージ内) |
5.6.1. Red Hat Enterprise Linux システムバージョンの PostgreSQL から PostgreSQL 10 Software Collection への移行
Red Hat Enterprise Linux 7 には PostgreSQL 9.2 が同梱されています。Red Hat Enterprise Linux システムバージョンのPostgreSQLからrh-postgresql10 Software Collection にデータを移行するには、
pg_upgrade
ツールを使用して高速アップグレードを行う (推奨) か、データベースデータを SQL コマンドでテキストファイルにダンプして新しいデータベースにインポートする方法があります。2 つ目の方法は、通常大幅に遅くなるため、手動で修正が必要になる場合があります。このアップグレード方法の詳細は、PostgreSQL documentation を参照してください。
重要
Red Hat Enterprise Linux システムバージョンの PostgreSQL から PostgreSQL 10 にデータを移行する前に、デフォルトで
/var/lib/pgsql/data/
ディレクトリーにある PostgreSQL データベースファイルを含むすべてのデータをバックアップしてください。
手順5.1 pg_upgrade
ツールを使用した高速アップグレード
PostgreSQL サーバーの高速アップグレードを実行するには、以下の手順を実行します。
- 古い PostgreSQL サーバーを停止し、データが一貫性のない状態にあることを確認します。これを行うには、
root
で次のコマンドを実行します。systemctl stop postgresql.service
サーバーが起動していないことを確認するには、以下を入力します。systemctl status postgresql.service
- 古いディレクトリー
/var/lib/pgsql/data/
が存在することを確認します。file /var/lib/pgsql/data/
データのバックアップを作成します。 - 新しいデータディレクトリー
/var/opt/rh/rh-postgresql10/lib/pgsql/data/
が存在しないことを確認します。file /var/opt/rh/rh-postgresql10/lib/pgsql/data/
PostgreSQL 10 を新規にインストールした場合、このディレクトリーはシステム内に存在しないはずです。存在する場合は、root
で以下のコマンドを実行してバックアップを作成します。mv /var/opt/rh/rh-postgresql10/lib/pgsql/data{,-scl-backup}
root
で以下のコマンドを実行して、新しいサーバーのデータベースデータをアップグレードします。scl enable rh-postgresql10 -- postgresql-setup --upgrade
または、/opt/rh/rh-postgresql10/root/usr/bin/postgresql-setup --upgrade コマンドを使用できます。別のバージョンの PostgreSQL からのアップグレードには--upgrade-from
オプションを使用できます。可能なアップグレードシナリオの一覧は、--upgrade-ids
オプションを使用して利用できます。作成された/var/lib/pgsql/upgrade_rh-postgresql10-postgresql.log
ログファイルを読み取り、アップグレード中に問題が発生したかどうかを確認することが推奨されます。root
で新しいサーバーを起動します。systemctl start rh-postgresql10-postgresql.service
また、以下のようにanalyze_new_cluster.sh
スクリプトを実行することが推奨されます。su - postgres -c 'scl enable rh-postgresql10 ~/analyze_new_cluster.sh'
- 必要に応じて、システムの起動時に PostgreSQL 10 サーバーが自動的に起動するように設定できます。古いシステム PostgreSQL サーバーを無効にするには、
root
で以下のコマンドを入力します。chkconfig postgresql off
PostgreSQL 10 サーバーを有効にするには、root
で入力します。chkconfig rh-postgresql10-postgresql on
- 設定がデフォルトと異なる場合は、設定ファイル (特に
/var/opt/rh/rh-postgresql10/lib/pgsql/data/pg_hba.conf
設定ファイル) を必ず更新してください。それ以外の場合は、postgres
ユーザーのみがデータベースにアクセスできます。
手順5.2 ダンプおよびリストアアップグレードの実行
PostgreSQL サーバーのダンプおよび復元アップグレードを実行するには、以下の手順を実行します。
- シェルプロンプトで、
root
で以下を入力し、古い PostgreSQL サーバーが実行中であることを確認します。systemctl start postgresql.service
- PostgreSQL データベースの全データをスクリプトファイルにダンプします。
root
で以下のコマンドを実行します。su - postgres -c 'pg_dumpall > ~/pgdump_file.sql'
root
で以下のコマンドを実行して、古いサーバーを停止します。systemctl stop postgresql.service
- 新規サーバーのデータディレクトリーを
root
として初期化します。scl enable rh-postgresql10-postgresql -- postgresql-setup --initdb
root
で新しいサーバーを起動します。systemctl start rh-postgresql10-postgresql.service
- 以前に作成した SQL ファイルからデータをインポートします。
su - postgres -c 'scl enable rh-postgresql10 "psql -f ~/pgdump_file.sql postgres"'
- 必要に応じて、システムの起動時に PostgreSQL 10 サーバーが自動的に起動するように設定できます。古いシステム PostgreSQL サーバーを無効にするには、
root
で以下のコマンドを入力します。chkconfig postgresql off
PostgreSQL 10 サーバーを有効にするには、root
で入力します。chkconfig rh-postgresql10-postgresql on
- 設定がデフォルトと異なる場合は、設定ファイル (特に
/var/opt/rh/rh-postgresql10/lib/pgsql/data/pg_hba.conf
設定ファイル) を必ず更新してください。それ以外の場合は、postgres
ユーザーのみがデータベースにアクセスできます。