新しいメジャー・バージョンへのアップグレード
Databases for PostgreSQL 3つの異なるアップグレードパスを提供しています:
- 新しいメジャーバージョンへのインプレースアップグレード。
- バックアップからの復元を行っています。
- 読み取り専用レプリカからのアップグレード。
データベースのメジャーバージョンがサポート終了(EOL)に近づいた場合は、最新のメジャーバージョンにアップグレードすることをお勧めします。
Databases for PostgreSQL の利用可能なバージョンは、 IBM Cloud のカタログページ、 Cloud Databases CLIプラグインのコマンド ibmcloud cdb deployables-show、あるいは
Cloud Databases APIの /deployables エンドポイントから確認できます。
新しいインスタンスにアップグレードする際は、アプリケーション内の接続情報も変更する必要があります。
以下のコマンド例では、 {id} を実行するために、データベースインスタンスの完全な CRN が必要です。 CRNには特殊文字が含まれているため、「not_found」エラーを回避するには、 URL-encoded形式でエンコードする必要があります。
PostgreSQL の新しいメジャーバージョンへのアップグレード要件
メジャーバージョンのアップグレードを開始する前に、まず維持する必要がある拡張機能、レプリケーションオブジェクト、およびアプリケーションの依存関係を確認してください。
一部の拡張機能や論理レプリケーションオブジェクトは、バージョン固有であるか、 PostgreSQL のメジャーバージョンと一致する必要があるサーバーサイドコンポーネントに依存しています。 アップグレード前にこれらを削除しておけば、障害を防ぐことができ、新しいバージョンが稼働し始めた後に、サポート対象のオブジェクトのみを再作成することができます。
確認すべき拡張機能および論理レプリケーションオブジェクト
アップグレードの前に、以下の項目を確認してください:
拡張機能
pg_repackold_snapshotwal2jsonanonPostGIS
レプリケーションスロット
Logical replication slots
アプリケーションの依存関係 アプリケーションが依存している拡張機能やレプリケーションオブジェクトを削除する場合は、アップグレードを進める前に、データフローとアプリケーションの動作を確認してください。 また、 PostgreSQL の特定の機能に依存しているアプリケーションロジックに、不具合が生じる可能性についても考慮してください。
pg_repack
アップグレードの前に pg_repack を削除し、アップグレード後に再作成してください。 pg_repack はバージョン固有の拡張子を使用しており、クライアントおよびサーバーコンポーネントは PostgreSQL のメジャーバージョンと一致している必要があります。
DROP EXTENSION pg_repack;
アップグレード後に、ワークロードで引き続きその拡張機能が必要な場合にのみ、拡張機能を再作成してください。
CREATE EXTENSION pg_repack;
old_snapshot
アップグレードの前に、 old_snapshot を削除してください。 PostgreSQL 18へのアップグレード後は、サポート対象外となるため、これを再作成しないでください。
DROP EXTENSION old_snapshot;
wal2json レプリケーションスロット
wal2json を論理デコードに使用している場合は、アップグレードの前に、関連するすべてのレプリケーションスロットを削除する必要があります。 pg_upgrade ユーティリティは、レプリケーションスロットが存在している間はメジャーバージョンのアップグレードを厳格に禁止しており、重大なエラーを発生させてアップグレードを中止します。
アップグレードの前:
- 保留中のWALデータがすべて処理済みであることを確認してください。
- レプリケーションスロットを使用しているアプリケーションを停止してください。
- レプリケーションスロットを削除します:
SELECT pg_drop_replication_slot('your_slot_name');
アップグレード後、必要に応じてレプリケーションスロットを再作成できます。 なお、 wal2json は CREATE EXTENSION 経由でインストールされるものではなく、データベースパラメータ(wal_level、 max_replication_slots、 max_wal_senders )およびテーブルの権限を通じて設定されるため、アップグレードの妨げにはなりません。
anon
アップグレードの前に「 anon 」拡張機能を無効にし、アップグレード後も引き続き必要であれば、再度有効にしてください。 anon を削除する前に、追加の手順が必要です。
「 anon 」拡張機能がインストールされている場合は、アップグレードを実行する前に、以下の手順に従い、管理者ユーザーとしてコマンドを実行してください。
-
(有効になっている場合は)すべてのマスキングルールを削除します。
SELECT anon.remove_masks_for_all_columns(); -
ロールの非表示設定を無効にしてください(ロールに「非表示」のマークが付いていると、アップグレードに失敗する可能性があります)。
SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL; -
「
anon」拡張子に「cascade」オプションを付けて指定します。DROP EXTENSION anon CASCADE; -
anon拡張機能がインスタンス内の複数のデータベースにインストールされている場合は、各データベースについて、以下に示す手順に従ってください。 -
アップグレードが完了したら、
anon拡張機能を再度有効にし、必要に応じてマスキングルールを再適用してください。
アップグレードを実行する前に、拡張機能を削除する前と後の両方でデータを検証し、マスキングの一貫性を確認することを強く推奨します。
PostGIS
PostGIS, をご利用の場合は、 PostgreSQL をアップグレードする前に、まず PostGIS をアップグレードしてください。
SELECT postgis_extensions_upgrade();
PostGIS 拡張機能のアップグレードを確認するには、次のクエリを使用してください。
SELECT postgis_full_version();
Logical replication slots
アップグレードの前に、すべての論理レプリケーションスロットを削除し、アップグレード後にそれらを再作成してください。 論理スロットはソースサーバーの状態に紐づいているため、アップグレード後のインスタンス上でクリーンな状態で再作成する必要があります。
SELECT pg_drop_replication_slot('<slot_name>');
その場でのメジャーバージョンアップ
インプレース・メジャーバージョンアップグレード(IPU)を利用すれば、バックアップを新しいデプロイメントに復元することなく、デプロイメントをサポート対象のバージョン /docs/databases-for-postgresql?topic=databases-for-postgresql-versioning-policy#version-definitions にアップグレードすることができます。 このアップグレードでは既存の接続文字列が引き継がれるため、再設定は必要ありません。
ただし、新しいバージョンで互換性の違いが生じた場合は、アプリケーションの変更が必要になる可能性があります。
アップグレード期間中、お客様の環境では一時的なダウンタイムが発生します。 所要時間は、導入環境の規模や複雑さによって異なります。
アップグレード中もアプリケーションでデータの読み取りを継続する必要がある場合は、/docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-provision をプロビジョニングし、アプリケーションを更新してそのレプリカを使用するように設定できます。 アップグレードが正常に完了しなかった場合、レプリカをプライマリに昇格させることができます。 詳細については、/docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-ipu を参照してください。
Databases for PostgreSQL メジャーバージョンのインプレースアップグレードの前後で、バックアップが自動的に作成されることはありません。
復元性を高めるには、以下を作成してください:
- アップグレード前のバックアップ:現在のデータ状態を保護するため
- アップグレード直後にバックアップを行い、新バージョンの最初の復元ポイントを設定する
アップグレード後にバックアップを実行しない場合、次の定期バックアップが完了するまでは、新しいバージョンでのポイント・イン・タイム復旧(PITR)は利用できません。
アップグレード前に作成されたバックアップおよびPITRポイントは、以前のバージョンに関連付けられたままとなり、アップグレード後のバージョンには復元できません。 ただし、これらを使用して、以前のバージョンを新しいデプロイメントに復元することは依然として可能です。
論理レプリケーションスロット
アップグレードの前に、すべての論理レプリケーションスロットを削除し、アップグレード後にそれらを再作成してください。 論理レプリケーションスロットはソースサーバーの状態に紐づいているため、アップグレード後のインスタンス上で再作成する必要があります。
SELECT pg_drop_replication_slot('<slot_name>');
開始前に
アップグレードを開始する前に、以下の点を確認してください:
-
UI、API、CLI、またはTerraformを使用して、お使いのデプロイメントでバージョンアップグレードがサポートされていることを確認してください。
例(CLI):
ibmcloud cdb capability-show versions postgresql -
事前確認の要件を確認してください。 このアップグレードはソース環境でのデプロイ時に実行され、 リスクが検出された場合はブロックされます。 以下のことを確認します。
- デプロイは正常です
- 少なくとも10%の空きディスク容量があること
- I/O使用率は90%未満です
- スキーマのサイズおよびオブジェクト数は、サポートされている制限範囲内です
- 必要な拡張および論理レプリケーションスロットのクリーンアップが完了しました
-
アプリケーションに影響を与える可能性のある互換性の変更点については、「 https://www.postgresql.org/docs/release/ 」を確認してください。
-
以前のバージョンへのダウングレードはサポートされていません。
-
インプレースアップグレードは、開始後はキャンセルできません。
-
アップグレードを行う前に、最新のバックアップが利用可能であることを確認してください。
| 出典: PostgreSQL 版 | サポートされているインプレース・アップグレードの対象 |
|---|---|
| 18 | 今後のメジャーバージョン(公開され次第) |
Gen2 PostgreSQL 18から始まる。 新しいバージョンへのアップグレード手順は、サポートが開始され次第追加されます。 以前のバージョン(14~17)については、/docs/databases-for-postgresql?topic=databases-for-postgresql-upgrading を参照してください。
アップグレードが完了すると、デプロイメントでは新しい PostgreSQL メジャーバージョンが実行されます。 アップグレード前のバックアップおよびPITRポイントは、以前のバージョンのタイムラインに属しており、アップグレード後のバージョンには復元できません。
新バージョンでも復元およびPITR機能を維持するには、アップグレード直後にバックアップを実行してください。 このバックアップは、今後の復旧作業の基準となります。
アップグレードに失敗した場合でも、アップグレード前のバックアップをPITRで利用することで、以前のバージョンを新しい環境に復元することができます。
UI でのアップグレード
-
同じバージョンの既存のデプロイメントからバックアップを復元して、テスト用のデプロイメントを作成します。
-
ステージング環境のアプリケーションを更新して、テストデプロイメントを使用するようにし、機能が正常に動作することを確認してください。
-
「 概要 」ページで「 メジャーバージョンのアップグレード 」をクリックして、アップグレードを開始してください。
-
アップグレード後のテスト環境において、アプリケーションの動作を検証する。
-
検証が完了したら、本番環境へのデプロイをアップグレードしてください。
アップグレードが開始されると、それを停止したり、元に戻したりすることはできません。 最新のバックアップが利用可能であることを確認してください。
アップグレード開始の有効期限は、アップグレードジョブが自動的にキャンセルされるまでに、そのジョブが開始されなければならない期間を定義します。 この値は、メンテナンスの時間帯に合わせて設定してください。 たとえば、アップグレードに30分かかり、許容時間が1時間の場合、有効期限を30分に設定します。 有効期限は5分から24時間の間で設定できます。
API を使用したアップグレード
インプレースアップグレードを開始するには、次のリクエストを使用してください:
curl -X PATCH https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/version \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{"version": "15"}'
詳細については、「 Cloud Databases 」API を参照してください。
CLI を使用したアップグレード
CDBプラグインのバージョン 0.20.0 以上で利用可能です。
利用可能なアップグレードパスを確認するには:
ibmcloud cdb deployment-capability-show <NAME|CRN> versions
アップグレードを開始するには:
ibmcloud cdb deployment-version-upgrade <NAME|CRN> <TARGET_VERSION>
コマンドの詳細については:
ibmcloud cdb deployment-version-upgrade --help
有効期限を設定するには、 --expire-in または --expire-at のいずれかを使用してください。
Terraform によるアップグレード
Terraform プロバイダーのバージョンが 1.79.2 以上で利用可能です。
アップグレードするには、設定ファイル内の version の値を更新してください。
アップグレード前にバックアップを省略すると、アップグレードが失敗した場合にデータが失われる可能性があります。 最新のバックアップが利用可能であることを確認してください。
Terraformは有効期限のタイムスタンプではなくタイムアウトを使用するため、必要に応じてタイムアウト時間を延長してください。
トラブルシューティング
アップグレードが正常に完了した後で問題が発生し、以前のバージョンに戻す必要がある場合は、 IBM Cloud® のサポートまでご連絡の上、指示をお受けください。 指示なしにPITRや復元を実行することは避けてください。復旧作業が複雑化する恐れがあります。
アップグレードは、すべての事前チェックに合格した後にのみ実行されます。 アップグレードがブロックされている場合は、以下を確認してください:
- クラスターの健全性(パトロニ状態は安定)
- 十分な空きディスク容量
- 許容可能なディスクI/O使用率
- スキーマのサイズおよびオブジェクト数の制限
スキーマの規模が大きい場合やオブジェクト数が多い場合、アップグレードにかかる時間が長くなる可能性があります。
アップグレードの試みが引き続き失敗する場合は、 https://cloud.ibm.com/login?redirect=%2Funifiedsupport%2Fsupportcenter からサポートチケットを発行してください。
読み取り専用レプリカからのアップグレード
読み取り専用レプリカを設定して アップグレードします。 デプロイメントと同じデータベースバージョンの読み取り専用レプリカをプロビジョニングし、すべてのデータがレプリケートされるまで待ちます。 デプロイメントとそのレプリカが同期されたら、読み取り専用レプリカを、新しいバージョンのデータベースを実行する完全なスタンドアロン・デプロイメントに昇格・アップグレードします。
アップグレードおよびプロモーションの手順を実行するには、POSTリクエストを使用して /deployments/{id}/remotes/promotion エンドポイントに対してPOSTリクエストを送信し、リクエストの本文にアップグレード先のバージョンを指定してください。
このリクエストは次のようなものです:
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/remotes/promotion \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"promotion": {
"version": "14",
"skip_initial_backup": false
}
}' \
skip_initial_backup はオプションです。 true に設定されている場合、新規デプロイメントは、プロモーションの完了時に初期バックアップを実行しません。 新規デプロイメントは、次回の自動バックアップが実行されるか、オンデマンド・バックアップを実行するまでバックアップされないという犠牲を伴うことで、短時間で使用可能になります。
プロモーションとアップグレードのドライ・ラン
メジャーバージョンのアップグレードによる影響を評価するには、ドライランを実行してください。 ドライランでは、昇格およびアップグレードがシミュレートされ、その結果がデータベースのログに出力されます。 「 ログ分析」連携機能 を通じて、データベースのログにアクセスし、確認することができます。 これにより、現在実行中のバージョンとその拡張機能を、目的のバージョンへ正常にアップグレードできるようになります。
ドライ・ランを実行するには、skip_initial_backup が false に設定されており、version が定義されている必要があります。
コマンドは次のようになります:
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/remotes/promotion \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"promotion": {
"version": "14",
"skip_initial_backup": false,
"dry_run": true
}
}' \
アップグレードのバックアップと復元
新しいデータベースバージョンを実行している新しいデプロイメントに、データの バックアップを復元 することで、データベースのバージョンをアップグレードできます。
UI でのアップグレード
_デプロイメントダッシュボード_の「 バックアップ 」メニューから バックアップを復元する 際は、新しいバージョンにアップグレードしてください。 バックアップの 「復元 」をクリックすると、新しいタブでプロビジョニングページが開き、そこで新しいデプロイメントに関するいくつかのオプションを変更できます。 選択肢の一つにデータベースのバージョンがあり、アップグレード可能なバージョンが自動的に表示されます。 バージョンを選択し、「 作成 」をクリックして、プロビジョニングおよび復元プロセスを開始してください。
CLI を使用したアップグレード
IBM Cloud CLI を使用してアップグレードやバックアップからの復元を行うには、リソースコントローラーからプロビジョニングコマンドを実行します。
ibmcloud resource service-instance-create <DEPLOYMENT_NAME_OR_CRN> <SERVICE_ID> <SERVICE_PLAN_ID> <REGION>
パラメーターの service-name、service-id、service-plan-id、region はすべて必須です。 また、-p に、バージョンとバックアップ ID のパラメーターを JSON オブジェクトで指定してください。 新規デプロイメントは、バックアップ時のソース・デプロイメントと同じディスクおよびメモリーを適用して自動的にサイズ変更されます。
このコマンドは、次のようになります。
ibmcloud resource service-instance-create example-upgrade databases-for-postgresql standard us-south \
-p \ '{
"backup_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
"version":14
}'
API を使用したアップグレード
バックアップからアップグレードを行う前に、 リソースコントローラーAPI を使用するために必要な手順をすべて完了させておいてください。 次に、APIに対して POST リクエストを送信します。 パラメーターの name、target、resource_group、resource_plan_id はすべて必須です。 バージョンとバックアップ ID も指定します。 新規デプロイメントのメモリーとディスクの割り振りは、バックアップ時のソース・デプロイメントと同じになります。
このコマンドは、次のようになります。
curl -X POST \
https://resource-controller.cloud.ibm.com/v2/resource_instances \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"name": "my-instance",
"target": "bluemix-us-south",
"resource_group": "5g9f447903254bb58972a2f3f5a4c711",
"resource_plan_id": "databases-for-postgresql-standard",
"backup_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
"version":14
}'
強制アップグレード
サポート終了日以降、非推奨バージョンを実行しているすべてのアクティブな Databases for PostgreSQL デプロイメントは、自動的に次のサポート対象バージョンにアップグレードされます。 たとえば、 PostgreSQL 13(非推奨)はバージョン 14 にアップグレードされます。
以下のリスクを回避するため、サポート終了日までにアップグレードを行ってください:
- この種の強制アップグレードについては、SLAは提供されません。
- データの一部が失われる可能性があります。
- お客様のアプリケーションで、長時間の停止が発生する可能性があります。
- 新しいバージョンと互換性がない場合、アプリケーションが動作しなくなる可能性があります。
- お客様の環境において、このアップグレードがいつ実施されるかについては、制御することができません。
- この強制アップグレードには、ロールバックの手順は用意されていません。
サポート終了日については、 バージョンポリシーページをご参照ください。
バージョンアップ時の_ロール権限_に関する問題
PostgreSQL 16 以降、ロールの権限の適用がより厳格になりました。 これは、 PostgreSQL における上流側のアーキテクチャ変更であり、 IBM® に固有の動作変更ではありません。 以前のバージョンでは、 CREATEROLE 属性を持つロールは、他のロールをより広範囲に管理することができました。 PostgreSQL 16 以降では、あるロールを付与または取り消すには、そのロールが別のロールに対して「 ADMIN OPTION 」権限を持っている必要があります。 詳細については、『 PostgreSQL 16』 のリリースノート、 ロール属性、および
ロールに関する GRANT を参照してください。
PostgreSQL 15 以前のバージョンから PostgreSQL 16 以降のバージョンへアップグレードする場合は、インプレースアップグレード(IPU)を開始する前に、ロールの権限設定を確認してください。 アップグレード後もロール管理を継続する必要がある場合は、アップグレードを開始する前に、必要なロールに「WITH ADMIN OPTION」が付与されていることを確認してください。
アップグレード後に権限に関連するエラーが発生した場合は、例えば次のような場合です:
ERROR: only roles with the ADMIN OPTION on role "some_role" may grant this role
DETAIL: role "admin" is not permitted to grant role "some_role"
組み込みのヘルパー関数 grant_admin_option_to_roles を使用して、特定のロールに対して ADMIN OPTION を復元します:
- これは、 PostgreSQL、 v15、およびそれ以前のバージョンから PostgreSQL 16以降にアップグレードしたデータベースにのみ適用されます(上記のエラーが発生している場合)。
- 修正を適用するロールの任意のリストを受け付けます。
admin userのみが実行可能です。- 複数回実行しても安全です(冪等性があります)。
使用例:
SELECT grant_admin_option_to_roles('role1', 'role2', 'role3');
この関数は、 ADMIN OPTION を持つ admin ユーザーに対して、指定されたロール(role1、 role2、 role3 )を付与します。これにより、 admin ユーザーは、アップグレードされたインスタンスにおいて、これらのロールを管理(付与、取り消し、変更、削除)できるようになります。
PostgreSQL のメジャー・バージョンの変更ログ
PostgreSQL の以前のバージョン(14~17)に関する情報については、『 Gen1 変更履歴 』を参照してください。