pgd node upgrade#
概要#
pgd node upgrade コマンドは、 EDB
Postgres分散クラスター内のノードのPostgresバージョンをアップグレードするために使用されます。
!!!note PGD 6.4以降、pgd node setup
は、シングルユーザーモードでBDRオブジェクトを作成する前にNextOID
カウンターを進め、これらのオブジェクトがアップグレードの失敗の原因となるシステムレンジOID<16384を受信しないようにします。アップグレードを実行する前に、コマンドは、既存のBDRオブジェクトがシステム範囲OIDで作成されたかどうかを確認します。検出された場合、コマンドはすぐに失敗し、影響を受けるオブジェクトを識別する明確なエラーが表示されます。復旧する手順については、
システムレンジのOIDエラーの解決 を参照してください。
構文#
pgd node <NODE_NAME> upgrade [OPTIONS] --old-bindir <OLD_BINDIR> --new-bindir <NEW_BINDIR> --old-datadir <OLD_DATADIR> --new-datadir <NEW_DATADIR> --database <DATABASE> --username <USER_NAME>
<NODE_NAME> はアップグレードするノードの名前であり、
<OLD_BINDIR> 、<NEW_BINDIR> 、<OLD_DATADIR>
、<NEW_DATADIR> 、<DATABASE> 、および<USER_NAME>
は、新旧のPostgresインスタンスのbinディレクトリ、新旧のPostgresインスタンスデータディレクトリ、データベース名、およびクラスターのインストールです。それぞれユーザー名。
オプション#
次の表は、pgd node upgrade
コマンドで使用可能なオプションをリストしています。
Short |
Long |
Default |
Env |
Description |
|---|---|---|---|---|
-b |
--old-bindir |
PGBINOLD |
古いPostgresインスタンスのbinディレクトリ |
|
-B |
--new-bindir |
PGBINNEW |
新しいPostgresインスタンスのbinディレクトリ |
|
-d |
--old-datadir |
PGDATAOLD |
古いPostgresインスタンスデータディレクトリ |
|
-D |
--new-datadir |
PGDATANEW |
新しいPostgresインスタンスデータディレクトリ |
|
--database |
PGDATABASE |
PGDデータベース名 |
||
-p |
--old-port |
5432 |
PGPORTOLD |
古いPostgresインスタンスポート |
--socketdir |
/var/run/postgresql |
PGSOCKETDIR |
アップグレード中にポストマスターソケットに使用するディレクトリ |
|
--new-socketdir |
/var/run/postgresql |
PGSOCKETDIRNEW |
新しいクラスターのポストマスターソケットに使用するディレクトリ |
|
--check |
チェックのみを実行し、クラスターを変更しないように指定します |
|||
-j |
--jobs |
1 |
同時に使用するプロセスまたはスレッドの数 |
|
-k |
--link |
新しいクラスターにファイルをコピーする代わりにハードリンクを使用する |
||
--old-options |
古いpostgresコマンドに渡すオプション、複数の呼び出しが追加されます |
|||
--new-options |
新しいpostgresコマンドに渡すオプション、複数の呼び出しが追加されます |
|||
-N |
--no-sync |
アップグレードされたクラスター内のすべてのファイルがディスクに書き込まれるのを待たない |
||
-P |
--new-port |
5432 |
PGPORTNEW |
新しいPostgresインスタンスのポート番号 |
-r |
--retain |
正常に完了した後でもSQLとログファイルを保持する |
||
-U |
--username |
PGUSER |
クラスターのインストールユーザー名 |
|
--clone |
効率的なファイルのクローン作成を使用する |
|||
--copy-by-block |
異なる暗号化設定を使用するクラスター間でデータを移行するために使用されます。このオプションは、透過的データ暗号化TDEを使用するデータベースでサポートされています |
|||
--key-unwrap-command |
PGDATAKEYUNWRAPCMD |
データ暗号化キーを解凍し復号化し、コピーするファイルにアクセスするコマンド。コマンドは、`pgd node setup`を使用したサーバーの初期化中に指定されたものと同じである必要があります |
Global Options も参照してください。
システムレンジのOIDエラーの解決#
コマンドがシステムレンジOIDエラーで失敗した場合、クラスターは、シングルユーザーモードでBDRオブジェクトを作成する前にNextOID
カウンターを進めなかった6.4より前のバージョンのpgd node setup
でセットアップされています。影響を受けるオブジェクトに、新しいOIDを再割り当てすることはできません。
エラーを解決するには、ノードを分割し、標準のpsqlセッションシングルユーザーモードではなくでBDR拡張機能をドロップして再作成し、構造を同期せずにクラスターに再参加して既存のデータを保持します。
ノードをクラスターから分離します。
pgd node <node-name> part
BDRデータベースに接続したpsqlセッションで、拡張機能をドロップします。
DROP EXTENSION bdr CASCADE;
標準のpsqlセッションシングルユーザーモードではなく、拡張機能を再作成します。
CREATE EXTENSION bdr;
bdr.create_node() および bdr.join_node_group() を使用してノードを再作成し、グループに再参加します。
synchronize_structureを'none'に設定します。pgd node upgradeを再度実行します。
例#
次の例では、 “kaolin”は、クイックスタートデモクラスターからアップグレードするノードの名前です。
ノードのPostgresバージョンをアップグレードする#
pgd node kaolin upgrade --old-bindir /usr/pgsql-16/bin --new-bindir /usr/pgsql-17/bin --old-datadir /var/lib/pgsql/16/data --new-datadir /var/lib/pgsql/17/data --database pgddb --username enterprisedb
ハードリンクを備えたノードのPostgresバージョンをアップグレードする#
pgd node kaolin upgrade --old-bindir /usr/pgsql-16/bin --new-bindir /usr/pgsql-17/bin --old-datadir /var/lib/pgsql/16/data --new-datadir /var/lib/pgsql/17/data --database pgddb --username enterprisedb --link
効率的なファイルクローン作成を使用してノードのPostgresバージョンをアップグレードする#
pgd node kaolin upgrade --old-bindir /usr/pgsql-16/bin --new-bindir /usr/pgsql-17/bin --old-datadir /var/lib/pgsql/16/data --new-datadir /var/lib/pgsql/17/data --database pgddb --username enterprisedb --clone
別のポート番号を持つノードのPostgresバージョンをアップグレードする#
pgd node kaolin upgrade --old-bindir /usr/pgsql-16/bin --new-bindir /usr/pgsql-17/bin --old-datadir /var/lib/pgsql/16/data --new-datadir /var/lib/pgsql/17/data --database pgddb --username enterprisedb --old-port 5433 --new-port 5434
透過的データ暗号化TDEを使用してノードのPostgres拡張バージョンをアップグレードする#
pgd node kaolin upgrade --database pgddb -B /usr/lib/edb-pge/16/bin --socketdir /var/run/edb-pge/ --old-bindir /usr/lib/edb-pge/15/bin --old-datadir /var/lib/edb-pge/15/main --new-datadir /var/lib/edb-pge/16/main --username postgres --key-unwrap-command "openssl enc -d -aes-128-cbc -pbkdf2 -pass pass:secret -in %p" --copy-by-block