Aurora PostgreSQL の PostgreSQL DB エンジンのアップグレード - Amazon Aurora

Aurora PostgreSQL の PostgreSQL DB エンジンのアップグレード

新しいバージョンのデータベースエンジンが Aurora PostgreSQL でサポートされている場合は、DB クラスターをその新しいバージョンにアップグレードできます。PostgreSQL DB クラスターのアップグレードには、メジャーバージョンのアップグレードとマイナーバージョンのアップグレードの 2 種類があります。

メジャーバージョンのアップグレードには、既存のアプリケーションとの下位互換性のないデータベースの変更が含まれる場合があります。そのため、DB インスタンスのメジャーバージョンアップグレードは手動で実行する必要があります。メジャーバージョンのアップグレードを行うには、DB クラスターを変更します。ただし、メジャーバージョンのアップグレードを行う前に、「メジャーバージョンのアップグレードを実施する方法」で説明されている手順を実行することをお勧めします。

それに対して、マイナーバージョンのアップグレードに含まれるのは、既存のアプリケーションとの下位互換性がある変更のみです。マイナーバージョンのアップグレードを手動で行うには、DB クラスターを変更します。または、DB クラスターの作成時または変更時に、[マイナーバージョン自動アップグレード] オプションを有効にすることができます。これにより、Aurora PostgreSQL によって新しいバージョンがテストおよび承認されると、DB クラスターが自動的にアップグレードされます。詳細については、「PostgreSQL の自動マイナーバージョンアップグレード」を参照してください。マイナーバージョンアップグレードの手動での実行に関する詳細は、「Aurora PostgreSQL エンジンの手動アップグレード」を参照してください。

論理レプリケーションのパブリッシャーまたはサブスクライバーとして設定されている Aurora DB クラスターでは、メジャーバージョンアップグレードを実行できません。詳細については、「Aurora での PostgreSQL 論理レプリケーションの使用」を参照してください。

Aurora PostgreSQL の以下のメジャーバージョンアップグレードを実行できます。

  • バージョン 9.6 のマイナーバージョン 9.6.9 以降からバージョン 10 のマイナーバージョン 10.11 以降にアップグレードします。

  • バージョン 10 のマイナーバージョン 10.7 以降からバージョン 11 のマイナーバージョン 11.7 以降にアップグレードします。

有効なアップグレードターゲットを決定する方法については、「アップグレード先のエンジンバージョンの決定」を参照してください。

Aurora PostgreSQL のアップグレードの概要

メジャーバージョンのアップグレードには、以前のバージョンのデータベースと下位互換性のないデータベースの変更が含まれる場合があります。その場合、既存のアプリケーションが適切に動作しなくなることがあります。そのため、Amazon Aurora では、メジャーバージョンアップグレードは自動的に適用されません。メジャーバージョンのアップグレードを行うには、DB クラスターを手動で変更します。

DB インスタンスを安全にアップグレードするために、Aurora PostgreSQL では、PostgreSQL ドキュメントで説明されている pg_upgrade ユーティリティを使用します。ライターのアップグレードが完了すると、各リーダーインスタンスは新しいメジャーバージョンに自動的にアップグレードされている間、短時間停止します。

Aurora PostgreSQL は、アップグレードの開始前に DB クラスターのスナップショットを取得します。アップグレードの完了後に前のバージョンに戻す場合は、アップグレード前に作成されたこのスナップショットから DB クラスターを復元するか、アップグレードの開始前の特定の時点に DB クラスターを復元することができます。詳細については、「DB クラスタースナップショットの復元」または「特定の時点への DB クラスターの復元」を参照してください。

メジャーバージョンのアップグレードプロセス中には、クローンボリュームが割り当てられます。スキーマの非互換性などの理由でアップグレードに失敗した場合、Aurora PostgreSQL はこのクローンを使用してアップグレードをロールバックします。ただし、ソースのボリュームのクローンが 15 個より多く割り当てられると、後続のクローンはフルコピーになり、時間がかかります。これにより、アップグレードプロセスにも時間がかかる場合があります。Aurora PostgreSQL でアップグレードがロールバックされる場合は、次の点に注意してください。

  • 元のボリュームとアップグレード中に割り当てられたクローンボリュームの両方の請求情報とメトリクスが表示される場合があります。Aurora PostgreSQL では、クラスターのバックアップ保持期間がアップグレードの時間よりも長くなった後に余分なボリュームがクリーンアップされます。

  • そのクラスターの次のクロスリージョンスナップショットコピーは、増分コピーではなく、フルコピーになります。

PostgreSQL のバージョン番号

DB クラスターの現在の Aurora PostgreSQL のバージョンと PostgreSQL データベースエンジンのバージョンを確認するには、「Amazon Aurora PostgreSQL のバージョンの確認」を参照してください。

PostgreSQL データベースエンジンのバージョン番号は、次のように付けられています。

  • PostgreSQL バージョン 10 以降では、エンジンのバージョン番号はメジャー.マイナーの形式になります。メジャーバージョンの番号は、バージョン番号の整数の部分です。マイナーバージョンの番号は、バージョン番号の小数の部分です。

    メジャーバージョンのアップグレードでは、10.マイナーから 11.マイナーのように、バージョン番号の整数の部分が大きくなります。

  • 10 より前のバージョンの PostgreSQL では、エンジンのバージョン番号はメジャー.メジャー.マイナーの形式になります。エンジンのメジャーバージョンの番号は、バージョン番号の整数と 1 つ目の小数の部分の両方です。たとえば、9.6 はメジャーバージョンです。マイナーバージョンの番号は、バージョン番号の 3 つ目の部分です。たとえば、バージョン 9.6.12 では、12 がマイナーバージョンの番号です。

    メジャーバージョンのアップグレードでは、バージョン番号の主要な部分が大きくなります。たとえば、9.6.12 から 10.7 へのアップグレードはメジャーバージョンのアップグレードで、9.610 がメジャーバージョンの番号です。

アップグレード先のエンジンバージョンの決定

データベースをアップグレードできるエンジンのメジャーバージョンを確認するには、CLI コマンドの describe-db-engine-versions を使用します。出力では、ValidUpgradeTarget 配列にターゲットバージョンが含まれています。IsMajorVersionUpgrade 値が true の場合、関連付けられた EngineVersion へのメジャーバージョンアップグレードを実行できます。配列が空の場合、メジャーバージョンのアップグレードは実行できません。最初に、メジャーバージョンアップグレードパスがあるマイナーバージョンにアップグレードします。

たとえば、次のコマンドでは、Aurora PostgreSQL エンジンのバージョン 9.6.12 を実行している DB クラスターのアップグレードに使用できるエンジンのメジャーバージョンが表示されます。

Linux、macOS、Unix の場合:

aws rds describe-db-engine-versions --engine aurora-postgresql --engine-version 9.6.12 \ --query 'DBEngineVersions[].ValidUpgradeTarget[?IsMajorVersionUpgrade == `true`]'

Windows の場合:

aws rds describe-db-engine-versions --engine aurora-postgresql --engine-version 9.6.12 ^ --query "DBEngineVersions[].ValidUpgradeTarget[?IsMajorVersionUpgrade == `true`]"

メジャーバージョンのアップグレードを実施する方法

メジャーバージョンのアップグレードには、以前のバージョンのデータベースと下位互換性のないデータベースの変更が含まれる場合があります。その場合、既存のアプリケーションが適切に動作しなくなることがあります。そのため、Amazon Aurora では、メジャーバージョンアップグレードは自動的に適用されません。メジャーバージョンのアップグレードを行うには、DB クラスターを手動で変更します。

本番稼働用の DB クラスターにアップグレードを適用する前には、アップグレードを十分にテストしてアプリケーションが正常に動作することを確認してください。

Aurora PostgreSQL DB クラスターをアップグレードする場合は、次のプロセスを踏むことをお勧めします。

  1. バージョン互換のパラメータグループを準備します。

    カスタム DB インスタンスまたは DB クラスターパラメータグループを使用している場合は、2 つのオプションがあります。

    • 新しい DB エンジンバージョンのデフォルト DB インスタンス、DB クラスターパラメータグループ、またはその両方を指定します。

    • 新しい DB エンジンバージョンの独自のカスタムパラメータグループを作成します。

    アップグレードリクエストの一部として DB インスタンスまたは DB クラスターの新しいパラメータグループを関連付ける場合は、パラメータを適用するために必ず、アップグレードの完了後にデータベースを再起動してください。パラメータグループの変更を適用するために DB インスタンスを再起動する必要がある場合、インスタンスのパラメータグループのステータスは pending-reboot と表示されます。インスタンスのパラメータグループのステータスは、コンソールまたは describe-db-instancesdescribe-db-clusters などの CLI コマンドを使用して確認できます。

  2. サポートされていない使用の確認

    • アップグレードを試みる前に、すべての準備済みのトランザクションをコミットまたはロールバックします。次のクエリを使用して、開いている準備済みのトランザクションがインスタンスにないことを確認します。

      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    • アップグレードを試みる前に、使用されているすべての reg* データ型を削除します。regtyperegclass を除き、reg* データ型をアップグレードすることはできません。このデータ型は、Amazon Aurora でアップグレードに使用される pg_upgrade ユーティリティで保持することはできません。pg_upgrade ユーティリティの詳細については、PostgreSQL のドキュメントを参照してください。

      サポートされていない reg* データ型が使用されていないことを確認するには、データベースごとに次のクエリを使用します。

      SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid IN ('pg_catalog.regproc'::pg_catalog.regtype, 'pg_catalog.regprocedure'::pg_catalog.regtype, 'pg_catalog.regoper'::pg_catalog.regtype, 'pg_catalog.regoperator'::pg_catalog.regtype, 'pg_catalog.regconfig'::pg_catalog.regtype, 'pg_catalog.regdictionary'::pg_catalog.regtype) AND c.relnamespace = n.oid AND n.nspname NOT IN ('pg_catalog', 'information_schema');
  3. バックアップを実行します。

    アップグレードプロセスでは、アップグレード中に DB クラスターのスナップショットが作成されます。アップグレードプロセスの前に手動でもバックアップを行う場合の詳細については、「DB クラスタースナップショットの作成」を参照してください。

  4. メジャーバージョンアップグレードを実行する前に、特定の拡張機能を、利用可能な最新バージョンにアップグレードします。更新する拡張機能は以下のとおりです。

    • pgRouting

    • postGIS

    使用している拡張機能ごとに以下のコマンドを実行します。

    ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version'

    詳細については、「PostgreSQL の拡張機能のアップグレード」を参照してください。

  5. バージョン 11.x にアップグレードする場合は、メジャーバージョンアップグレードを実行する前に、サポートされていない拡張機能を削除してください。削除する拡張機能は以下のとおりです。

    • chkpass

    • tsearch2

  6. ターゲットバージョンに応じて、unknown データ型を削除します。

    PostgreSQL バージョン 10 では、unknown データ型のサポートは終了しています。バージョン 9.6 のデータベースで unknown データ型を使用している場合、バージョン 10 にアップグレードすると以下のようなエラーメッセージが表示されます。

    Database instance is in a state that cannot be upgraded: PreUpgrade checks failed: The instance could not be upgraded because the 'unknown' data type is used in user tables. Please remove all usages of the 'unknown' data type and try again."

    データベース内の unknown データ型を検索して、問題の列を削除したり、サポートされているデータ型に変更したりするには、以下の SQL コードを使用します。

    SELECT DISTINCT data_type FROM information_schema.columns WHERE data_type ILIKE 'unknown';
  7. リハーサルのアップグレードを実行します。

    プロダクションデータベースのアップグレードを試みる前に、プロダクションデータベースの複製でメジャーバージョンアップグレードをテストすることを強くお勧めします。テスト用の複製のインスタンスを作成するには、最新のスナップショットからデータベースを復元するか、データベースのクローンを作成します。詳細については、「スナップショットからの復元」または「Aurora DB クラスターでのデータベースのクローン作成」を参照してください。

    詳細については、「Aurora PostgreSQL エンジンの手動アップグレード」を参照してください。

  8. プロダクションインスタンスをアップグレードします。

    リハーサルのメジャーバージョンアップグレードが成功したら、安心してプロダクションデータベースをアップグレードできます。詳細については、「Aurora PostgreSQL エンジンの手動アップグレード」を参照してください。

    注記

    アップグレードプロセス中は、クラスターのポイントインタイムの復元は実行できません。Aurora PostgreSQL は、バックアップ保持期間が 0 より大きい場合、アップグレードプロセス中に DB クラスターのスナップショットを取得します。ポイントインタイムの復元を実行できるのは、アップグレードの開始前およびインスタンスの自動スナップショットの完了後です。

    進行中のアップグレードについては、Amazon RDS を使用して、pg_upgrade ユーティリティで生成される 2 つのログを表示することができます。このログは、pg_upgrade_internal.logpg_upgrade_server.log です。Amazon Aurora はこれらのログのファイル名にタイムスタンプを追加します。これらのログも、他のログと同様、表示できます。詳細については、「Amazon Aurora データベースログファイル」を参照してください。

  9. PostgreSQL の拡張機能をアップグレードします。PostgreSQL のアップグレードプロセスでは、PostgreSQL の拡張機能はアップグレードされません。詳細については、「PostgreSQL の拡張機能のアップグレード」を参照してください。

メジャーバージョンアップグレードが完了したら、以下のことをお勧めします。

  • pg_statistic テーブルを更新する ANALYZE 操作を実行します。

  • すべてが想定どおりに機能することを確認するために、アップグレードしたデータベースで同様のワークロードを使用してアプリケーションをテストします。アップグレードが確認されたら、このテストインスタンスを削除できます。

Aurora PostgreSQL エンジンの手動アップグレード

Aurora PostgreSQL DB クラスターのアップグレードを実行するには、以下の AWS マネジメントコンソール、AWS CLI、または RDS API の手順に従います。

コンソールを使用して DB クラスターのエンジンバージョンをアップグレードするには

  1. AWS マネジメントコンソールにサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[データベース] を選択して、アップグレードする DB クラスターを選択します。

  3. [Modify] を選択します。[DB クラスターの変更] ページが表示されます。

  4. [DB engine version] で、新しいバージョンを選択します。

  5. [Continue] を選択して、変更の概要を確認します。

  6. 変更をすぐに反映させるには、[Apply immediately] を選択します。このオプションを選択すると、停止状態になる場合があります。詳細については、「Amazon Aurora DB クラスターの変更」を参照してください。

  7. 確認ページで、変更内容を確認します。正しい場合は、[クラスターの変更] を選択して変更を保存します。

    または、[戻る] を選択して変更を編集するか、[キャンセル] を選択して変更をキャンセルします。

DB クラスターのエンジンバージョンをアップグレードするには、CLI の modify-db-cluster コマンドを使用します。以下のパラメータを指定します。

  • --db-cluster-identifier – DB クラスターの名前。

  • --engine-version – アップグレード先のデータベースエンジンのバージョン番号です。有効なエンジンバージョンの詳細については、AWS CLI の describe-db-engine-versions コマンドを参照してください。

  • --allow-major-version-upgrade--engine-version パラメータが DB クラスターの現在のメジャーバージョンとは異なるメジャーバージョンである場合に必須のフラグです。

  • --no-apply-immediately ​– 次のメンテナンス時間中に変更を適用します。今すぐ変更を適用するには、--apply-immediately を使用します。

Linux、macOS、Unix の場合:

aws rds modify-db-cluster \ --db-cluster-identifier mydbcluster \ --engine-version new_version \ --allow-major-version-upgrade \ --no-apply-immediately

Windows の場合:

aws rds modify-db-cluster ^ --db-cluster-identifier mydbcluster ^ --engine-version new_version ^ --allow-major-version-upgrade ^ --no-apply-immediately

DB クラスターのエンジンのバージョンをアップグレードするには、ModifyDBCluster オペレーションを使用します。以下のパラメータを指定します。

  • DBClusterIdentifier – DB クラスターの名前、たとえば mydbcluster です。

  • EngineVersion – アップグレード先のデータベースエンジンのバージョン番号です。有効なエンジンバージョンについては、DescribeDBEngineVersions オペレーションを使用します。

  • AllowMajorVersionUpgradeEngineVersion パラメータが DB クラスターの現在のメジャーバージョンとは異なるメジャーバージョンである場合に必須のフラグです。

  • ApplyImmediately – 変更をすぐに適用するか、次のメンテナンスウィンドウ中に適用するかを指定します。今すぐ変更を適用するには、値を true に設定します。次のメンテナンスウィンドウ中に変更を適用するには、値を false に設定します。

PostgreSQL の自動マイナーバージョンアップグレード

DB クラスターの作成時または変更時に [マイナーバージョン自動アップグレード] を有効にした場合、クラスターは自動的にアップグレードされます。

PostgreSQL の各メジャーバージョンでは、Amazon Aurora によって 1 つのマイナーバージョンが自動アップグレードバージョンとして指定されます。Amazon Aurora によってマイナーバージョンがテストおよび承認されると、そのマイナーバージョンのアップグレードがメンテナンスウィンドウ中に自動で実行されます。Aurora は、新しくリリースされたマイナーバージョンを自動アップグレードバージョンとして自動的に設定しません。Aurora によって新しい自動アップグレードバージョンが指定される前には、次のようないくつかの基準が考慮されます。

  • 既知のセキュリティの問題

  • PostgreSQL コミュニティバージョンのバグ

  • マイナーバージョンがリリースされてからのフリート全体の安定性

以下の AWS CLI コマンドとスクリプトを使用して、現在の自動アップグレードマイナーバージョンを確認できます。

aws rds describe-db-engine-versions --engine aurora-postgresql | grep -A 1 AutoUpgrade| grep -A 2 true |grep PostgreSQL | sort --unique | sed -e 's/"Description": "//g'
注記

結果が返されない場合、マイナーバージョンの自動アップグレードが利用可能でなくスケジュールもされていません。

PostgreSQL DB インスタンスは、以下の基準を満たしている場合、メンテナンスウィンドウの間に自動的にアップグレードされます。

  • DB クラスターの [マイナーバージョン自動アップグレード] オプションが有効になっている。

  • DB クラスターで、現在の自動アップグレードマイナーバージョン未満の DB エンジンのマイナーバージョンが実行されている。

PostgreSQL の拡張機能のアップグレード

PostgreSQL エンジンのアップグレードでは、PostgreSQL 拡張機能はアップグレードされません。エンジンのアップグレード後に拡張機能を更新するには、ALTER EXTENSION UPDATE のコマンドを使用します。

注記

Amazon RDS の PostgreSQL DB インスタンスで PostGIS 拡張機能を実行している場合は、PostGIS ドキュメントの「PostGIS のアップグレード手順」に従って、アップグレードしてください。

拡張機能をアップグレードするには、次のコマンドを使用します。

ALTER EXTENSION extension_name UPDATE TO 'new_version';

現在インストールされている拡張機能を一覧表示するには、次のコマンドで PostgreSQL の pg_extension カタログを使用します。

SELECT * FROM pg_extension;

インストールで使用可能な特定の拡張機能バージョンのリストを表示するには、次のコマンドで PostgreSQL の pg_available_extension_versions ビューを使用します。

SELECT * FROM pg_available_extension_versions;