Upgrading PostgreSQL to EDB Postgres Extended Server while enabling TDE#
TDEを有効にして新しいEDB Postgres Extended Serverクラスターを作成し、 pg_upgradeを使用して既存のPostgreSQLクラスターから新しい暗号化されたクラスターにデータを転送します。
アップグレードの準備 既存のインスタンスのバックアップを実行する。
-
新しいサーバーの空のディレクトリを作成し、postgresユーザーがそれを所有していることを確認します。
暗号化のために
wrapおよびunwrapコマンドをエクスポートするように環境変数を設定します。暗号化を有効にしてサーバーを初期化します。
デフォルトポートを変更して、新しいサーバーが別のポートで利用できるようにします。
データベースサーバーを起動します。
データベースサーバーに接続し、機能していることを確認します。
-
ソースと新しいサーバーの両方を停止します。
pg_upgradeを
--copy-by-blockオプションとともに使用して、ソースサーバーから新しいサーバーにデータをコピーします。ソース、ターゲットのbin、およびデータディレクトリを指定します。新しい暗号化されたデータベースサーバーを開始します。
暗号化されたデータベースサーバーに接続し、データが転送されたことを確認します。
-
データベースとその統計をクリーンアップします。
pg_upgradeが提供するスクリプトを使用して、ソースPostgreSQLクラスターを削除します。
実際の例#
この例では、Ubuntu 22.04マシンで透過的データの暗号化を有効にしながら、PostgreSQL 16インスタンスをEDB Postgres Extended Server 16にアップグレードします。 binおよびconfigディレクトリの場所は、オペレーティングシステムとPostgresバージョンによって異なります。
アップグレードの準備#
EDB repository からEDB Postgres Extended Serverをインストールします。インストールするバージョンのメジャーバージョンがソースサーバーと同じであることを確認します。 pg_upgradeは、マイナーバージョンとパッチバージョン間のアップグレードをサポートしていますが、異なるメジャーバージョン間のアップグレードはサポートしていません。
pg_dumpall 、 pgBackRest 、または Barman を使用して、暗号化されていないソースサーバーのバックアップを作成します。
暗号化されたサーバーの作成#
新しいサーバーの空のディレクトリを作成します。この例では、ディレクトリ名は
TDEです。
mkdir /var/lib/edb-pge/16/TDE
postgresユーザーがディレクトリを所有していることを確認します。
sudo chown postgres /var/lib/edb-pge/16/TDE
sudo chgrp /var/lib/edb-pge/16/TDE
wrapおよびunwrapコマンドをエクスポートするように環境変数を設定します。
export PGDATAKEYWRAPCMD=openssl enc -e -aes-128-cbc -pass pass:ok -out %p
export PGDATAKEYUNWRAPCMD=openssl enc -d -aes-128-cbc -pass pass:ok -in %p
注釈
または、暗号化されたサーバーを初期化するときに`--key-unwrap-command=<command>` および`--key-wrap-command=<command>` 引数を使用して、 wrap および`unwrap` コマンドを含めます。 考えられる構成の詳細については、 initdb TDE options を参照してください。
暗号化を使用して新しいサーバーを初期化します。
/usr/lib/edb-pge/16/bin/initdb --data-encryption -D /var/lib/edb-pge/16/TDE
このコマンドは、暗号化されたサーバーのすべての構成ファイルでconfigディレクトリを初期化します。
暗号化されたインスタンスの構成ファイルのデフォルトのポート番号を変更します。
#portという行のコメントを外し、ポート番号を変更します。例
port 5590
暗号化されたサーバーを起動します。
/usr/lib/edb-pge/16/bin/pg_ctl -D /var/lib/edb-pge/16/TDE start
サーバーに接続します。
/usr/lib/edb-pge/16/bin/psql -p 5590
注釈
2つの異なるPostgresバージョンを使用している場合、暗号化されたサーバーのpsqlユーティリティを使用します。それ以外の場合、システムは以前のインスタンスからpsqlを使用しようとします。
新しいサーバーが暗号化されるように保証には、 Verifying TDE is enabled 。
暗号化されたサーバーへのアップグレード#
両方のサーバーを停止します。
/usr/lib/postgresql/16/bin/pg_ctl -D /var/lib/postgresql/16/non-TDE stop
/usr/lib/edb-pge/16/bin/pg_ctl -D /var/lib/edb-pge/16/TDE stop
非互換性をテストするには、 checkモードで
pg_upgradeコマンドを実行します。-bおよび-Bでは、ソースおよびターゲットBINディレクトリを指定します。-dおよび-Dでは、ソースおよびターゲットのconfigディレクトリを指定します。--copy-by-blockオプションを含めます。
/usr/lib/edb-pge/16/bin/pg_upgrade -b /usr/lib/postgresql/16/bin -B /usr/lib/edb-pge/16/bin -d /var/lib/postgresql/16/non-TDE -D /var/lib/edb-pge/16/TDE --copy-by-block --check
注釈
--check モードは、コマンドを実行せずに事前チェックを実行します。
ソースサーバーからターゲットサーバーにデータをコピーするには、通常モードで
pg_upgradeコマンドを実行します。
/usr/lib/edb-pge/16/bin/pg_upgrade -b /usr/lib/postgresql/16/bin -B /usr/lib/edb-pge/16/bin -d /var/lib/postgresql/16/non-TDE -D /var/lib/edb-pge/16/TDE --copy-by-block
暗号化されたサーバーを再起動します。
/usr/lib/edb-pge/16/bin/pg_ctl -D /var/lib/edb-pge/16/TDE start
暗号化されたデータベースサーバーに接続します。
/usr/lib/edb-pge/16/bin/psql -p 5590
スポットチェックを実行して、暗号化されていないサーバーにあったデータベース、テーブル、スキーマ、およびリソースが新しいサーバーで利用できることを確認します。例、すべてのデータベースをリストします。
\l
データベースたとえば hr に接続し、既存のテーブルを検索します。
\c hr
SELECT * FROM dept;
アップグレード後のクリーンアップ#
pg_upgradeがデータを正常に暗号化したことを確認した後、クリーンアップを実行します。
postgresユーザーとして、データベースとその統計をクリーンアップします。
/usr/lib/edb-pge/16/bin/vacuumdb --all --analyze-in-stages
pg_upgradeによって生成されたスクリプトを使用して、暗号化されていないサーバーのすべてのデータファイルを削除します。
./delete_old_cluster.sh