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 cluster - データベースファイル実行可能ファイルとデータの両方。実行時にシステム上のPostgresデータベースインスタンスを構成します。

Old Postgres cluster - アップグレードする既存のPostgresクラスター、データの移行元。

New Postgres cluster - データの移行先の新しい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以降である必要があります。

  • 新しいクラスターはシャットダウン状態である必要があります。

  • 新しいクラスターに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