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

ApsaraDB RDS:Upgrade a major version using blue-green deployment

最終更新日:Aug 25, 2026

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

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

前提条件

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

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

  • インスタンスが読み取り専用インスタンスまたは専用クラスターインスタンスではないこと

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

課金

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

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

ご利用のサービスが新しいインスタンスで安定して稼働することを確認した後、新しいインスタンスをサブスクリプションに変換し、ソースインスタンスをリリースまたはサブスクリプションの解除を行ってください。

重要

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

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

  • 新しいインスタンスは、ソースインスタンスに適用されていた割引を継承しません。手続きを進める前に、インスタンスのサブスクリプション解除ページで具体的な返金額を確認してください。

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

考えられる影響

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

サービスの中断

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

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

  • 接続中断期間:クライアント側の DNS キャッシュの更新時間によって決まります。事前にvSwitch の切り替えを使用してこの値を見積もることができます。

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

切り替え後、ソースインスタンスはデフォルトで読み取り専用のままです。ソースインスタンスで再度書き込みを許可するには、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。

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

    重要
    • 一度作成されたアップグレードタスクは、変更または削除できません。

    • ソースインスタンスが [移行中] ステータスの間は、パラメーターの変更、再起動、インスタンスのリリースなどの運用保守 (O&M) 操作は利用できません。

    • [リソース不足] エラーが表示された場合は、[ターゲットプライマリゾーン] を切り替えて再試行してください。

  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;

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

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