すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ブルーグリーンデプロイメントによるメジャーバージョンのアップグレード

最終更新日:Mar 29, 2026

ブルーグリーンデプロイメントは、ソースインスタンスを新規インスタンスに復元し、その新規インスタンスで pg_upgrade を実行してターゲットバージョンにアップグレードすることで、ApsaraDB RDS for PostgreSQL のメジャーエンジンバージョンをアップグレードします。切り替えを実行すると、ソースインスタンスのエンドポイントは自動的に新規インスタンスに切り替わります。アプリケーションの接続文字列を変更する必要はありません。

利用可能なすべてのアップグレードモードの比較については、「メジャーバージョンアップグレードソリューションの概要」をご参照ください。

前提条件

開始する前に、以下を確認してください。

  • インスタンスが ApsaraDB RDS for PostgreSQL 16 またはそれ以前のバージョンを実行していること

  • インスタンスは、読み取り専用インスタンス でも 専用クラスターインスタンス でもありません。

  • インスタンスで Babelfish が有効になっていないこと (マイナーエンジンバージョン番号の末尾が babelfish ではないこと)

課金

ブルーグリーンデプロイメントによるアップグレードを開始すると、システムはソースインスタンスに基づいて新規インスタンスを作成します。ソースインスタンスをリリースするまで、両方のインスタンスは個別に課金されます。

ソースインスタンスの課金方法新規インスタンスの課金方法
サブスクリプションまたは従量課金従量課金
サーバーレスサーバーレス

新規インスタンスでサービスが安定して実行されていることを確認した後、新規インスタンスをサブスクリプションに変換し、ソースインスタンスをリリースまたは登録解除します。

重要

ソースインスタンスをリリースする前に、次の点にご注意ください。

  • ソースインスタンスが有効期限の切れていないサブスクリプションインスタンスである場合、新規インスタンスは残りのサブスクリプション期間を継承できません。ソースインスタンスを早期にリリースすると、金銭的な損失が発生する可能性があります。返金ルールに関する詳細については、「返金ポリシー」をご参照ください。

  • 新規インスタンスは、ソースインスタンスに適用されていた割引を継承しません。続行を決定する前に、インスタンスの登録解除ページで具体的な返金額を確認してください。

  • サブスクリプションインスタンスの返金はリアルタイムでは処理されません。返金額とタイミングは、実際の登録解除請求書に準じます。

潜在的な影響

アップグレードを開始する前に、以下を確認してください。

サービスの中断

切り替えを伴うブルーグリーンデプロイメントを実行すると、切り替え中にソースインスタンスが読み取り専用になり、一時的な接続中断が発生します。アップグレードはオフピーク時に実行してください。切り替えを実行しない場合、サービスに影響はありません。

  • 読み取り専用期間:データベースオブジェクトの数に依存します。SELECT count(1) FROM pg_class; を実行して数を確認してください。数百万のオブジェクトがある場合、読み取り専用期間は数十分以上続くことがあります。

  • 接続中断期間:クライアント側の DNS キャッシュのリフレッシュ時間によって決まります。事前にvSwitch の切り替えを使用してこの値を推定してください。

  • 合計アップグレード期間:データベースオブジェクトの数に依存します。タスクハブで進捗を監視してください。

切り替え後、ソースインスタンスはデフォルトで読み取り専用のままです。ソースインスタンスで再度書き込みを許可するには、rds_force_trans_ro_non_sup パラメーターを off に設定します。詳細については、「インスタンスパラメーターの設定」をご参照ください。

クロスバージョンのアップグレードパス

高性能ローカルディスクを使用する PostgreSQL 9.4 および 10 のインスタンスは、クラウドディスクにのみアップグレードでき、直接のターゲットとして最大で PostgreSQL 14 までとなります。PostgreSQL 15 以降に到達するには、まず中間バージョンにアップグレードする必要があります。

  • PostgreSQL 9.4:中間ステップとして 10、11、12、13、または 14 にアップグレードできます。

  • PostgreSQL 10:中間ステップとして 11、12、13、または 14 にアップグレードできます。

レプリケーションスロット

  • ソースインスタンスがレプリケーションスロットを持つパブリッシャーである場合、それらのレプリケーションスロットはアップグレード後に失われます。

  • ソースインスタンスがレプリケーションスロットのサブスクライバーである場合、アップグレードによってレプリケーションスロットの競合が発生し、データ同期の問題が起こる可能性があります。これを防ぐ方法については、「よくある質問」をご参照ください。

仮想 IP の変更

切り替え後、新規インスタンスの仮想 IP アドレスが変更されます。ファイアウォールの設定や、仮想 IP を直接参照するアプリケーションの設定を確認してください。この複雑さを避けるために、仮想 IP の代わりにインスタンスのエンドポイントを使用してアプリケーションを設定してください。

パラメーターの変更

  • ターゲットバージョンでサポートされていないパラメーターは自動的に削除されます。

  • ターゲットバージョンの有効な範囲外の値を持つパラメーターは、ターゲットバージョンのデフォルトのテンプレート値にリセットされます。

  • アップグレード中、statement_timeout は一時的に 0 に設定され、アップグレード完了後に元の値に復元されます。

DTS タスク

インスタンスがData Transmission Service (DTS) のソースまたは送信先である場合、スペックアップ後にDTS タスクを再作成してください。

プラグインの互換性

アップグレードにより、インスタンスは自動的に最新のマイナーエンジンバージョンに更新されます。アップグレードの前後にプラグインの互換性を確認してください。

新規インスタンスに継承されない設定

新規インスタンスは、ソースインスタンスの名前、タグCloudMonitor のアラートルール、またはバックアップデータを継承しません。

ステップ 1:アップグレード前チェックの実行

  1. ApsaraDB RDS コンソールにログインします。上部のナビゲーションバーで、インスタンスが存在するリージョンを選択します。インスタンスを見つけて、その ID をクリックします。

  2. (オプション) ソースインスタンスに読み取り専用インスタンスが存在する場合、オフピーク時にアプリケーションの読み取り専用インスタンスのエンドポイントをプライマリインスタンスのエンドポイントに変更し、その後、読み取り専用インスタンスを削除します。

    アップグレード前に読み取り専用インスタンスを削除する必要があります。これは、読み取り専用ノードとレプリケーションスロットが新規インスタンスに自動的に転送されないためです。アップグレード後、新規インスタンスに新しい読み取り専用インスタンスを作成します。
  3. 左側のナビゲーションウィンドウで、[メジャーバージョンのアップグレード] をクリックします。

    [メジャーバージョンアップグレード] が表示されない場合は、ご利用のインスタンスが上記の前提条件を満たしていることを確認してください。
  4. [アップグレードチェック] タブで、[アップグレードチェックレポートの作成] をクリックします。

  5. ターゲットバージョンを選択し、[アップグレードモード]ブルーグリーンデプロイメントに設定して、[OK] をクリックします。インスタンスステータスがインスタンスのメンテナンス中に変わります。チェックが完了すると、ステータスは実行中に戻ります。

  6. チェックレポートの結果を確認します。

    • 成功または警告:ステップ 2 に進みます。

    • 失敗[情報の表示] をクリックし、特定された問題を修正して、再度チェックを実行します。

    重要

    - [警告] の結果が出た場合は、指摘されたすべての項目を修正し、結果が [成功] になるまでチェックを再実行してください。 - チェックが成功した後にプライマリインスタンスにプラグインを作成した場合は、続行する前に再度チェックを実行してください。

ステップ 2:メジャーバージョンのアップグレード

  1. [インスタンスのアップグレード] タブをクリックし、警告を読み、[アップグレードバージョンの選択] でバージョンを選択し、[アップグレードタスクの作成] をクリックします。

  2. ダイアログボックスで [OK] をクリックします。

  3. [メジャーエンジンバージョンアップグレードタスクの作成] セクションで、[アップグレードモード][ブルーグリーンデプロイメント] に設定されていることを確認し、次のパラメーターを設定します:ストレージ容量の計算例:

    • ソースインスタンス:合計 100 GB、使用済み 70 GB、PL1 ESSD を選択。計算:70 × 120% = 84 GB → 85 GB に切り上げ。選択可能な最小容量:85 GB。

    • ソースインスタンス:合計 700 GB、使用済み 350 GB、PL2 ESSD を選択。計算:350 × 120% = 420 GB、これは PL2 の最小容量 500 GB 未満。選択可能な最小容量:500 GB。

    パラメーター説明
    [ストレージタイプ]新規インスタンスは Enhanced SSD (ESSD) と高性能ディスクのみをサポートします。ストレージクラスはソースインスタンスと一致する必要があります。ソースインスタンスが高性能ローカルディスクを使用している場合、新規インスタンスは ESSD のみ使用できます。ESSD パフォーマンスレベル (PL) を変更すると、選択した PL に基づいて最小ストレージ容量が自動的に調整されます。
    [利用可能ゾーン][プライマリインスタンスの切り替え][スタンバイインスタンスの切り替え]必要に応じて、プライマリインスタンスとスタンバイインスタンスを異なるゾーンに設定します。
    [切り替え設定]アップグレード後のトラフィックの切り替え方法を選択します:[切り替えなし] — トラフィックは自動的に切り替えられません。通常、公式アップグレード前のサービス互換性テストに使用されます。[切り替え] — トラフィックは自動的に切り替えられます。通常、互換性が確認された後の公式アップグレードに使用されます。切り替えはロールバックできません。切り替え中、ソースインスタンスは読み取り専用に設定されます。リスクを最小限に抑えるため、最初の試行では [切り替えなし] を選択してください。テスト後、新規インスタンスをリリースし、アップグレードを再度実行してから、公式アップグレードのために [切り替え] を選択します。
    [ストレージ容量]新規インスタンスのストレージ容量を選択します。選択可能な最小容量は、ソースインスタンスの使用済みストレージ × 120% (5 GB 単位で切り上げ) またはソースインスタンスの合計ストレージ容量のいずれか小さい方です。この値は、選択した ESSD PL の最小購入可能ストレージも満たす必要があります:PL1 = 20 GB、PL2 = 500 GB、PL3 = 1,500 GB。使用済みストレージを確認するには、[モニタリングとアラーム][ディスクストレージ (MB)] メトリックをご参照ください。
    [インスタンス仕様]新規インスタンスのインスタンスタイプを選択します。利用可能なタイプについては、「プライマリインスタンスタイプの一覧」をご参照ください。
  4. [今すぐ作成] をクリックします。アップグレードタスクが開始されると、インスタンスのステータスが [移行中] に変わります。タスクハブで進捗を監視してください。

    重要

    - 作成されたアップグレードタスクは、変更または削除できません。 - ソースインスタンスが [移行中] ステータスの間は、パラメーターの変更、再起動、インスタンスのリリースなどの運用保守操作は利用できません。 - [リソース不足] エラーが表示された場合は、[ターゲットプライマリゾーン] を切り替えて再試行してください。

  5. アップグレード結果を確認します。ソースインスタンスと新規インスタンスの両方が [実行中] ステータスを示すと、アップグレードは完了です。

    - 切り替えを伴うブルーグリーンデプロイメント:アップグレード後、トラフィックは自動的に新規インスタンスに切り替わります。 - 切り替えなしのブルーグリーンデプロイメント:アップグレード後、トラフィックはソースインスタンスに残ります。 - アップグレード後、[アップグレード履歴] タブに移動し、[アップグレードログ] 列の [情報の表示] をクリックして、読み取り専用期間と詳細なアップグレードプロセスを確認します。読み取り専用期間は、[切り替え時間] から [切り替え終了時間] までで測定され、DNS キャッシュの伝播によりインスタンスが到達不能になる期間は含まれません。 - 切り替えなしのアップグレードの場合でも、システムは参考のために [切り替え時間][切り替え終了時間] を記録します。
    アップグレード結果インスタンスステータス意味
    実行中移行中アップグレードタスクが実行中です
    成功実行中アップグレードタスクが成功しました

次のステップ

  1. ブルーグリーンデプロイメント (切り替え) 方法でアップグレードした場合、新規インスタンスでサービスが安定して実行されていることを確認した後、ソースインスタンスをリリースします。コストを節約するために、新規インスタンスの課金方法をサブスクリプションに変換します。

    有効期限前にサブスクリプションインスタンスをリリースすると、金銭的な損失が発生する可能性があります。新規インスタンスは、ソースインスタンスの割引を継承しません。返金は実際の登録解除請求書に準じ、リアルタイムでは処理されません。
  2. (オプション) アップグレード前に読み取り専用インスタンスを削除した場合、新規インスタンスに再作成します。

    1. 新規インスタンスにPostgreSQL の読み取り専用インスタンスを作成します。

    2. アプリケーションで、エンドポイントを新しい読み取り専用インスタンスを指すように更新します。

API リファレンス

API オペレーション説明
UpgradeDBInstanceMajorVersionPrecheckメジャーバージョンアップグレードのアップグレード前チェックを実行します
DescribeUpgradeMajorVersionPrecheckTaskアップグレード前チェックレポートをクエリします
UpgradeDBInstanceMajorVersionメジャーエンジンバージョンをアップグレードします
DescribeUpgradeMajorVersionTasksメジャーバージョンアップグレードタスクの履歴をクエリします

参考文献

よくある質問

メジャーバージョンアップグレード中にインスタンスを変更できますか?

いいえ。アップグレードが進行中の間、インスタンスは変更できません。変更はアップグレードが完了した後にのみ可能です。

自動メジャーバージョンアップグレードはサポートされていますか?

いいえ。メジャーバージョンアップグレードは手動でトリガーする必要があります。

メジャーバージョンのダウングレードはサポートされていますか?

いいえ。メジャーバージョンアップグレード後のダウングレードはサポートされていません。より低いバージョンを実行するには、そのバージョンで新しいインスタンスを購入し、Data Transmission Service (DTS) を使用してデータを移行してください。

メジャーバージョンアップグレード後、新規インスタンスでビューを作成する際に `raster_overviews` の競合が発生します。どうすれば修正できますか?

この問題は、PostGIS のバージョンが 2.5.2 より前で、PostGIS プラグインを先にアップグレードせずに PostgreSQL 10 または 11 から PostgreSQL 12 にアップグレードする場合に発生します。

ステップ 1:ソースインスタンスで PostGIS プラグインをアップグレードする

次のコマンドを 2 回実行して、アップグレードが正常に完了したことを確認します。

SELECT PostGIS_Extensions_Upgrade();
SELECT PostGIS_Extensions_Upgrade();

ステップ 2:PostGIS Raster プラグインを使用しているかどうかに基づいて修正方法を選択する

PostGIS Raster プラグインが使用中の場合:

  1. ソースインスタンスで、raster_overviews ビューを拡張からデタッチし、プレースホルダーに置き換えます。

    ALTER EXTENSION PostGIS_Raster DROP VIEW raster_overviews;
    CREATE OR REPLACE VIEW raster_overviews AS SELECT 1;
  2. PostgreSQL インスタンスを少なくとも PostgreSQL 12 にアップグレードします。

  3. アップグレード後、新規インスタンスでビューを再作成します。

    CREATE
    OR REPLACE VIEW raster_overviews AS
    SELECT
      current_database() AS o_table_catalog,
      n.nspname AS o_table_schema,
      c.relname AS o_table_name,
      a.attname AS o_raster_column,
      current_database() AS r_table_catalog,
      split_part(
        split_part(s.consrc, '''::name', 1),
        '''',
        2
      )::name AS r_table_schema,
      split_part(
        split_part(s.consrc, '''::name', 2),
        '''',
        2
      )::name AS r_table_name,
      split_part(
        split_part(s.consrc, '''::name', 3),
        '''',
        2
      )::name AS r_raster_column,
      trim(
        both
        from
          split_part(s.consrc, ',', 2)
      )::integer AS overview_factor
    FROM
      pg_class c,
      pg_attribute a,
      pg_type t,
      pg_namespace n,
      (
        SELECT
          connamespace,
          conrelid,
          conkey,
          pg_get_constraintdef(oid) As consrc
        FROM
          pg_constraint
      ) AS s
    WHERE
      t.typname = 'raster'::name
      AND a.attisdropped = false
      AND a.atttypid = t.oid
      AND a.attrelid = c.oid
      AND c.relnamespace = n.oid
      AND c.relkind = ANY(
        ARRAY[ 'r'::char, 'v'::char, 'm'::char,
        'f'::char ]
      )
      AND s.connamespace = n.oid
      AND s.conrelid = c.oid
      AND s.consrc LIKE '%_overview_constraint(%'
      AND NOT pg_is_other_temp_schema(c.relnamespace)
      AND has_table_privilege(c.oid, 'SELECT'::text);
    
    ALTER EXTENSION PostGIS_Raster ADD VIEW raster_overviews;

PostGIS Raster プラグインが使用中でない場合:

  1. プラグインをソースインスタンスに配置します。

    DROP EXTENSION PostGIS_Raster;
  2. PostgreSQL インスタンスを少なくとも PostgreSQL 12 にアップグレードします。

アップグレード中のレプリケーションスロットの競合によるデータの不整合を防ぐにはどうすればよいですか?

ソースインスタンスがレプリケーションスロットのサブスクライバーである場合、アップグレード中にレプリケーションスロットが新規インスタンスに競合される可能性があり、データの不整合を引き起こすことがあります。

ソース (下位バージョン) インスタンスのサブスクリプションデータを保持するには:アップグレード中にソースインスタンスが過度の負荷で失敗しないようにして、レプリケーションスロットが競合されるのを防ぎます。アップグレードが完了したら、新規インスタンスでサブスクリプションを無効にします。

\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;

新規 (上位バージョン) インスタンスのサブスクリプションデータを保持するには:アップグレードを開始する前にソースインスタンスでサブスクリプションを無効にし、アップグレードが完了した後に新規インスタンスで有効にします。

ソースインスタンスで無効にする:

\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;

新規インスタンスで有効にする:

\c your_database
ALTER SUBSCRIPTION your_subscription_name ENABLE;

詳細については、「論理サブスクリプション」および「変更追跡」をご参照ください。

アップグレード後のサブスクリプションデータの不整合をどのように処理しますか?

すでに不整合が発生している場合は、次のアプローチを使用して調整します。

  1. 新規インスタンスで、影響を受けるテーブルデータを削除し、copy_data=true でサブスクリプションを再作成します。詳細については、「ALTER SUBSCRIPTION」をご参照ください。

  2. ON CONFLICT を使用してソースインスタンスからデータをインポートします。次の例は、さまざまな競合シナリオを処理する方法を示しています。

    CREATE TABLE my_tbl(id INT PRIMARY KEY, t TIMESTAMP, val TEXT);
    
    INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'a');
    INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP, 'b');
    INSERT INTO my_tbl VALUES (3, CURRENT_TIMESTAMP, 'c');
    
    -- 新しいタイムスタンプ:既存の行を更新
    INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'd') ON CONFLICT(id) DO UPDATE
        SET t = excluded.t,
            val = excluded.val
        WHERE my_tbl.t < excluded.t;
    
    -- 古いタイムスタンプ:既存の行を保持
    INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP - '10 hours'::interval, 'e') ON CONFLICT(id) DO UPDATE
        SET t = excluded.t,
            val = excluded.val
        WHERE my_tbl.t < excluded.t;
    
    -- 新しい行:直接挿入
    INSERT INTO my_tbl VALUES (5, CURRENT_TIMESTAMP - '10 hours'::interval, 'f') ON CONFLICT(id) DO UPDATE
        SET t = excluded.t,
            val = excluded.val
        WHERE my_tbl.t < excluded.t;

アップグレード前に読み取り専用インスタンスを削除する必要があるのはなぜですか?

ソースインスタンスの読み取り専用ノードとレプリケーションスロットは、アップグレード後に新規インスタンスに自動的に転送されません。アップグレード前に読み取り専用インスタンスを削除することで、エンドポイントの競合を防ぎ、クリーンな切り替えを保証します。アップグレード後、新規インスタンスに新しい読み取り専用インスタンスを作成し、アプリケーションのエンドポイントをそれに応じて更新してください。