このページでは、pg_upgrade
を使用して AlloyDB Omni PostgreSQL 15 ベースのコンテナを AlloyDB Omni PostgreSQL 16 にアップグレードする方法について説明します。このページの手順では、スタンドアロン サーバーとしてデプロイされた AlloyDB Omni と、複製されたスタンバイ ノードとして構成された AlloyDB Omni のアップグレード手順について説明します。pg_upgrade
を使用すると、データが失われることなくアップグレードが完了します。
PostgreSQL のアップグレード オプションの詳細については、pg_upgrade をご覧ください。
始める前に
- アップグレードを開始する前に、データベース クラスタの完全バックアップを取得することをおすすめします。
AlloyDB Omni 15 サービスが実行されていることを確認するには、次のコマンドを実行します。
Docker
docker exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
Podman
podman exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
PostgreSQL 15 の
pg_squeeze
拡張機能は、AlloyDB Omni PostgreSQL 16.3.0 ではサポートされていません。AlloyDB Omni 15 のインストールにpg_squeeze
が含まれている場合は、AlloyDB Omni 16 へのアップグレードを行う前に拡張機能を削除する必要があります。AlloyDB Omni にカスタム拡張機能をインストールした場合は、それらのカスタム拡張機能が 16.3.0 イメージにもインストールされていることを確認します。次のコマンドを実行して、インストールされている拡張機能を確認します。
Docker
docker exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c " SELECT * FROM pg_extension;"
Podman
podman exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c " SELECT * FROM pg_extension;
AlloyDB Omni バージョン 15.5.2 以前からアップグレードする場合は、まず AlloyDB Omni 15 の新しいバージョンにアップグレードする必要があります。AlloyDB Omni バージョン 15.5.2 以前から最新バージョンに移行する。
Docker コンテナ環境で AlloyDB Omni をアップグレードする
Docker または Podman コンテナ環境で AlloyDB Omni PostgreSQL 15 から AlloyDB Omni PostgreSQL 16.3.0 にアップグレードする手順は次のとおりです。
Docker
bin
をコピーし、アップグレードする AlloyDB Omni コンテナのバージョンからのディレクトリを共有します。mkdir -p TMP/alloydb15_bin TMP/alloydb15_share docker cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin docker cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
アップグレードされたデータが保存される AlloyDB Omni PostgreSQL 16 コンテナの新しいデータ ディレクトリを作成します。
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
前の AlloyDB Omni コンテナと同じネットワークにすべてのパスがマウントされた状態で、AlloyDB Omni PostgreSQL 16 実行コンテナを起動します。次の例をご覧ください。
docker run -d --name ALLOYDB16_CONTAINER \ -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ -v DATA_PATH/15/data:/var/lib/postgresql/old_data \ -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \ -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \ --network container:ALLOYDB15_CONTAINER \ google/alloydbomni:16 /bin/sleep infinity
アップグレードされたバージョンでコンテナの新しいデータ ディレクトリを初期化します。
docker exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
古いクラスタに
--data-checksum
や--locale
などの特別な設定がある場合は、それらのパラメータも渡して AlloyDB Omni 16 コンテナを作成する必要があります。以前のバージョンのコンテナで再起動ポリシーを有効にしている場合は、次の例のように、再起動ポリシーを無効にする必要があります。
docker update --restart=no ALLOYDB15_CONTAINER
pg_upgrade --check
を実行して、クラスタが AlloyDB Omni 16 へのアップグレード準備ができていることを確認します。docker exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -p 5432 -P 5433 --check -v \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data"
pg_upgrade --check
コマンドが完了すると、Clusters are compatible
で終わる出力が表示されます。これは、クラスタでアップグレードの準備ができていることを示します。このコマンドは、AlloyDB Omni PostgreSQL 15 コンテナもチェックしてシャットダウンします。pg_upgrade --check
が完了すると、アプリケーションはデータベースに接続したり、クエリを実行できなくなります。pg_upgrade
を実行してアップグレードされたデータを新しいデータ ディレクトリにコピーします。その後、pg_upgrade
が正常に完了し、AlloyDB Omni PostgreSQL 15 コンテナが終了したことを確認します。docker exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -v --copy \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data" docker ps -a
pg_upgrade
が失敗した場合は、PostgreSQL 15 コンテナを起動して AlloyDB Omni PostgreSQL 15 コンテナにロールバックします。docker logs ALLOYDB16_CONTAINER docker rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER docker run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/15/data:/var/lib/postgresql/data \ google/alloydbomni:15
アップグレードが失敗した理由を確認するには、ログを確認します。
アップグレードが成功したら、クリーンアップして AlloyDB Omni PostgreSQL 16 コンテナを再起動します。
docker rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER docker run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ google/alloydbomni:16
Podman
bin
をコピーし、アップグレードする AlloyDB Omni コンテナのバージョンからのディレクトリを共有します。mkdir -p TMP/alloydb15_bin TMP/alloydb15_share podman cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin podman cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
アップグレードされたデータが保存される AlloyDB Omni PostgreSQL 16 コンテナの新しいデータ ディレクトリを作成します。
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
前の AlloyDB Omni コンテナと同じネットワークにすべてのパスがマウントされた状態で、AlloyDB Omni PostgreSQL 16 実行コンテナを起動します。次の例をご覧ください。
podman run -d --name ALLOYDB16_CONTAINER \ -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ -v DATA_PATH/15/data:/var/lib/postgresql/old_data \ -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \ -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \ --network container:ALLOYDB15_CONTAINER \ google/alloydbomni:16 /bin/sleep infinity
アップグレードされたバージョンでコンテナの新しいデータ ディレクトリを初期化します。
podman exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
古いクラスタに
--data-checksum
や--locale
などの特別な設定がある場合は、それらのパラメータも渡して AlloyDB Omni 16 コンテナを作成する必要があります。以前のバージョンのコンテナで再起動ポリシーを有効にしている場合は、次の例のように、再起動ポリシーを無効にする必要があります。
podman update --restart=no ALLOYDB15_CONTAINER
pg_upgrade --check
を実行して、クラスタが AlloyDB Omni 16 へのアップグレード準備ができていることを確認します。podman exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -p 5432 -P 5433 --check -v \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data"
pg_upgrade --check
コマンドが完了すると、Clusters are compatible
で終わる出力が表示されます。これは、クラスタでアップグレードの準備ができていることを示します。このコマンドは、AlloyDB Omni PostgreSQL 15 コンテナもチェックしてシャットダウンします。pg_upgrade --check
が完了すると、アプリケーションはデータベースに接続したり、クエリを実行できなくなります。pg_upgrade
を実行してアップグレードされたデータを新しいデータ ディレクトリにコピーします。その後、pg_upgrade
が正常に完了し、AlloyDB Omni PostgreSQL 15 コンテナが終了したことを確認します。podman exec -u postgres ALLOYDB16_CONTAINER bash -c " cd /tmp; pg_upgrade -v --copy \ -b /usr/lib/postgresql/15/bin \ -B /usr/lib/postgresql/16/bin \ -d /var/lib/postgresql/old_data \ -D /var/lib/postgresql/data" podman ps -a
pg_upgrade
が失敗した場合は、PostgreSQL 15 コンテナを起動して AlloyDB Omni PostgreSQL 15 コンテナにロールバックします。podman logs ALLOYDB16_CONTAINER podman rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER podman run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/15/data:/var/lib/postgresql/data \ google/alloydbomni:15
アップグレードが失敗した理由を確認するには、ログを確認します。
アップグレードが成功したら、クリーンアップして AlloyDB Omni PostgreSQL 16 コンテナを再起動します。
podman rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER podman run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \ -e POSTGRES_PASSWORD=postgres \ -v DATA_PATH/16/data:/var/lib/postgresql/data \ google/alloydbomni:16
スタンバイ ノードで AlloyDB Omni サーバーをアップグレードする
AlloyDB Omni サーバーがアクティブで、ストリーミング レプリケートされたスタンバイ構成でデプロイされている場合は、スタンバイ ノードで pg_upgrade
を実行することはできません。スタンバイ ノードで AlloyDB Omni サーバーをアップグレードするには、アクティブ ノードで AlloyDB Omni をアップグレードする前に、スタンバイ ノードでレプリケーション ラグがないことを確認することをおすすめします。
スタンバイ AlloyDB Omni サーバーをアップグレードする手順は次のとおりです。
- アクティブ ノードをアップグレードする前に、スタンバイ AlloyDB Omni コンテナを停止します。
- アクティブ ノードがアップグレードされたら、rsync を使用して、アップグレードされたデータ ディレクトリを新しいアクティブ ノードからスタンバイ ノードに同期します。ストリーミング レプリケートされたスタンバイ サーバーのアップグレードの詳細については、
pg_upgrade
をご覧ください。 - 同じデータ ディレクトリを使用して、AlloyDB for PostgreSQL の PostgreSQL 16 イメージを使用してコンテナを起動します。
論理レプリケーションを使用している場合は、レプリケーションによるデータのアップグレードをご覧ください。