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拡張機能をドロップして再作成し、構造を同期せずにクラスターに再参加して既存のデータを保持します。

  1. ノードをクラスターから分離します。

pgd node <node-name> part
  1. BDRデータベースに接続したpsqlセッションで、拡張機能をドロップします。

DROP EXTENSION bdr CASCADE;
  1. 標準のpsqlセッションシングルユーザーモードではなく、拡張機能を再作成します。

CREATE EXTENSION bdr;
  1. bdr.create_node() および bdr.join_node_group() を使用してノードを再作成し、グループに再参加します。synchronize_structure を'none' に設定します。

  2. 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