In-place Postgres or Postgres and PGD major version upgrades#
コマンドラインユーティリティ pgd node upgrade を使用して、PGDノードをPostgresの新しいメジャーバージョン、またはPostgresとPGDのメジャーバージョンにアップグレードできます。
注釈
5.7.0より前のバージョンでは、インプレースメジャーバージョンのアップグレードに使用されるコマンドはbdr_pg_upgrade
でした。ただし、このコマンドには、 pgd node upgrade
のように、PostgresメジャーバージョンとPGDバージョンの両方を同時にアップグレードするオプションがありません。
pgd node upgrade
は、標準の pg_upgrade のラッパーで、PGD固有のロジックをプロセスに追加して、スムーズなアップグレードを保証します。
用語#
この用語は、アップグレードプロセスと関連するコンポーネントを説明するときに使用されます。
Postgresクラスター —データベースファイルは、実行可能ファイルとデータの両方で、実行時にシステム上のPostgresデータベースインスタンスを構成します。
古いPostgresクラスター —アップグレードする既存のPostgresクラスター、データを移行するクラスター。
新しいPostgresクラスター —データの移行先の新しいPostgresクラスター。このPostgresクラスターは、古いクラスターの1つ前のメジャーバージョンである必要があります。
注意事項#
両方のPostgresクラスターが pg_upgrade のすべての要件を満たしている必要があるという事実を含む、標準のPostgresメジャーバージョンのアップグレードの注意事項が適用されます。
さらに、他のツールがレプリケーションスロットとレプリケーション起点を使用している場合、pgd node upgrade
を使用しないでください。アップグレード後には、PGDスロットとオリジンのみが復元されます。
pgd node upgrade のいくつかの前提条件を満たす必要があります。
古いPostgresクラスターを使用してアプリケーションを切断します。たとえば、PGDクラスター内の別のノードにリダイレクトできます。
両方のPostgresクラスターのピア認証を構成します。
bdr_pg_upgradeはピア認証が必要です。新しいバージョンのPGDと同じまたは新しいバージョンを新しいクラスターにインストールする必要があります。
PGDバージョンは4.1.0以降である必要があります。バージョン3.7.22以降もサポートされています。
新しいクラスターはシャットダウン状態である必要があります。
新しいクラスターにPGDパッケージをインストールする必要があります。
新しいクラスターは、古いクラスター構成と一致するように、必要に応じて既に初期化および構成されている必要があります。
データベース、テーブル、およびその他のオブジェクトは、新しいクラスターに存在してはなりません。
注釈
PGD 5.7.0+にアップグレードする場合、両方のクラスターで同じPGDバージョンを実行する必要はありません。新しいクラスターは5.7.0以降で実行されている必要があります。その場合、pgd node upgrade はPGDバージョンを5.7.xにアップグレードし、Postgresメジャーバージョンをアップグレードします。
pgd node upgrade
を実行する前に、古いPostgresクラスターを起動することをお勧めします。
CLIは、古いPostgresクラスターがシャットダウンしている場合、それを起動します。
使用法#
PostgresまたはPostgresとPGDの新しいメジャーバージョンにアップグレードするには、最初に新しいバージョンパッケージをインストールする必要があります。
pgd node upgrade コマンドライン#
pgd node upgrade
は、すべてのパラメーターをpg_upgradeに渡します。したがって、
pg_upgrade でサポートされているパラメーターを指定できます。
概要#
pgd node <NODE_NAME> upgrade [OPTION] ...
オプション#
pg_upgradeのオプションに加えて、次のパラメーターをpgd node upgrade
に渡すことができます。
必須パラメーター#
これらのパラメーターは、コマンドラインで指定するか、 --database
パラメーターを除くすべての場合、同等の環境変数で指定します。これらはpgd node upgrade
によって使用されます。
-b, --old-bindir—古いPostgresクラスターのbinディレクトリ。-B, --new-bindir—新しいPostgresクラスターのbinディレクトリ。-d, --old-datadir—古いPostgresクラスターデータディレクトリ。-D, --new-datadir—新しいPostgresクラスターデータディレクトリ。--database— PGDデータベース名。
オプショナルパラメーター#
これらのパラメーターはオプショナルであり、pgd node upgrade
によって使用されます。
-p, --old-port—古いクラスターポート番号。-s, --socketdir—アップグレード中にポストマスターソケットに使用するディレクトリ。--check—チェックのみを実行し、クラスターを変更しないように指定します。
その他のパラメーター#
上記のいずれでもない他のパラメーターはpg_upgradeに渡されます。 pg_upgradeは次のパラメーターを受け入れます。
-j, --jobs—同時に使用するプロセスまたはスレッドの数。-k, --link—新しいクラスターにファイルをコピーする代わりに、ハードリンクを使用します。-o, --old-options—古いpostgresコマンドに渡すオプション。複数の呼び出しが追加されます。-O, --new-options—新しいpostgresコマンドに渡すオプション。複数の呼び出しが追加されます。-N, --no-sync—アップグレードされたクラスター内のすべてのファイルがディスクに書き込まれるのを待たないでください。-P, --new-port—新しいクラスターポート番号。-r, --retain—正常に完了した後でもSQLファイルとログファイルを保持します。-U, --username—クラスターのインストールユーザー名。--clone—効率的なファイルのクローン作成を使用します。
環境変数#
コマンドラインパラメーターの代わりにこれらの環境変数を使用できます。
PGBINOLD—古いPostgresクラスターのbinディレクトリ。PGBINNEW—新しいPostgresクラスターのbinディレクトリ。PGDATAOLD—古いPostgresクラスターデータディレクトリ。PGDATANEW—新しいPostgresクラスターデータディレクトリ。PGPORTOLD—古いPostgresクラスターポート番号。PGSOCKETDIR—アップグレード中にポストマスターソケットに使用するディレクトリ。
例#
次のようなシナリオが考えられます。
アップグレードするクラスターのノード名はkaolinです。
古いPostgresクラスターのbinディレクトリは
/usr/lib/postgresql/16/binです。新しいPostgresクラスターのbinディレクトリは
/usr/lib/postgresql/17/binです。古いPostgresクラスターデータディレクトリは
/var/lib/postgresql/16/mainです。新しいPostgresクラスターデータディレクトリは
/var/lib/postgresql/17/mainです。データベース名は
bdrdbです。
次のコマンドを使用して、クラスターをアップグレードできます。
pgd node kaolin upgrade \
- -old-bindir /usr/lib/postgresql/16/bin \
- -new-bindir /usr/lib/postgresql/17/bin \
- -old-datadir /var/lib/postgresql/16/main \
- -new-datadir /var/lib/postgresql/17/main \
- -database bdrdb
実行された手順#
これらの手順は、pgd node upgrade の実行時に実行されます。
注釈
--check が`pgd node upgrade` への引数として指定される場合、 CLIはデータベースを変更する手順をスキップします。
PGD Postgresチェック#
Steps |
--check supplied |
|---|---|
Collecting pre-upgrade new cluster control data |
run |
Checking new cluster state is shutdown |
run |
Checking PGD versions |
run |
Starting old cluster (if shutdown) |
skip |
Connecting to old cluster |
skip |
Checking if bdr schema exists |
skip |
Turning DDL replication off |
skip |
Terminating connections to database |
skip |
Waiting for all slots to be flushed |
skip |
Disconnecting from old cluster |
skip |
Stopping old cluster |
skip |
Starting old cluster with PGD disabled |
skip |
Connecting to old cluster |
skip |
Collecting replication origins |
skip |
Collecting replication slots |
skip |
Disconnecting from old cluster |
skip |
Stopping old cluster |
skip |
pg_upgrade手順#
標準のpg_upgrade手順が実行されます。
注釈
指定された場合、 --check はpg_upgradeに渡されます。
PGDのアップグレード後の手順#
Steps |
--check supplied |
|---|---|
Collecting old cluster control data |
skip |
Collecting new cluster control data |
skip |
Advancing LSN of new cluster |
skip |
Starting new cluster with PGD disabled |
skip |
Connecting to new cluster |
skip |
Creating replication origin, repeated for each origin |
skip |
Advancing replication origin, repeated for each origin |
skip |
Creating replication slot, repeated for each slot |
skip |
Stopping new cluster |
skip |