Amazon RDS の PostgreSQL DB エンジンのアップグレード - Amazon Relational Database Service

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

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

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

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

ご使用の PostgreSQL DB インスタンスでリードレプリケーションを使用している場合は、ソースインスタンスのアップグレード前に、すべてのリードレプリカをアップグレードする必要があります。DB インスタンスがマルチ AZ 配置にある場合、プライマリとスタンバイのレプリカの両方がアップグレードされます。アップグレードが完了するまで、DB インスタンスは使用できない場合があります。

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

DB インスタンスを安全にアップグレードするために、Amazon RDS では、PostgreSQL ドキュメントで説明されている pg_upgrade ユーティリティを使用します。

バックアップ保存期間が 0 を超える値の場合、Amazon RDS はアップグレードプロセス中に 2 つの DB スナップショットを作成します。最初の DB スナップショットは、アップグレードの変更が行われる前の DB インスタンスから作成されます。アップグレードがデータベースに対して機能しない場合は、このスナップショットを復元して、以前のバージョンを実行する DB インスタンスを作成できます。アップグレードの完了後に 2 番目の DB スナップショットが作成されます。

注記

DB インスタンスのバックアップ保持期間を 0 より大きく設定した場合にのみ、Amazon RDS は、アップグレード中に DB スナップショットを作成します。バックアップ保持期間を変更するには、「Amazon RDS DB インスタンスを変更する」を参照してください。

DB インスタンスがマルチ AZ 配置にある場合は、プライマリライター DB インスタンスとスタンバイ DB インスタンスのいずれもアップグレードされます。ライターとスタンバイ DB インスタンスは同時にアップグレードされます。アップグレードが完了するまで停止が発生します。

アップグレードが完了したら、データベースエンジンの前のバージョンに戻すことはできません。前のバージョンに戻す必要がある場合は、アップグレードの前に作成された DB スナップショットを復元して、新しい DB インスタンスを作成します。

PostgreSQL のバージョン番号

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

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

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

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

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

PostgreSQL のメジャーバージョンアップグレードの選択

メジャーバージョンのアップグレードには、以前のバージョンのデータベースと下位互換性のないデータベースの変更が含まれる場合があります。その場合、既存のアプリケーションが適切に動作しなくなることがあります。

そのため、Amazon RDS では、メジャーバージョンアップグレードは自動的に適用されません。メジャーバージョンアップグレードを実行するには、DB インスタンスを手動で変更します。本稼働 DB インスタンスにアップグレードを適用する前に、アップグレードを徹底的にテストしてアプリケーションが正常に動作することを確認してください。PostgreSQL メジャーバージョンアップグレードを行うには、「メジャーバージョンのアップグレードを実施する方法」に記載されているステップを実施することをお勧めします。

PostgreSQL データベースは、その次のメジャーバージョンにアップグレードすることができます。PostgreSQL データベースのバージョンによっては、アップグレード時に上位のメジャーバージョンにスキップすることができます。次の表は、ソース PostgreSQL データベースのバージョンと、アップグレードに使用できる関連するターゲットメジャーバージョンを示しています。

注記

アップグレードターゲットは、ソースのマイナーバージョン以降と同時にリリースされた上位バージョンに有効になります。

データベースで PostGIS 拡張機能を使用している場合は、ソースとターゲットの組み合わせでメジャーバージョンをスキップすることはできません。このような場合は、目的のターゲットバージョンに到達するまで、次のメジャーバージョンに一度に 1 つずつアップグレードします。

pgRouting 拡張機能は、メジャーバージョンをバージョン 11.x にスキップするアップグレードではサポートされていません。アップグレードがバージョン 9.4.x、9.5.x、または 9.6.x からバージョン 11.x に移行する場合、メジャーバージョンはスキップされます。pgRouting 拡張機能を削除して、アップグレード後に再度追加できます。

tsearch2 および chkpass の拡張機能は、PostgreSQL 11 以降ではサポートされていません。バージョン 11.x にアップグレードする場合は、アップグレードの前にこれらの拡張機能を削除してください。

現在のソースバージョン 優先されるアップグレードターゲット 最新のアップグレードターゲット
9.3.x 9.5.20 9.5.22
9.3.23 9.5.139.6.9 9.6.9
9.3.24 9.5.149.6.10 9.6.10
9.3.25 9.5.15 9.5.15
9.4.7 9.5.209.6.11 9.6.11
9.4.9、9.4.11、9.4.12、9.4.14、9.4.15、9.4.17、9.4.18、9.4.19 9.5.20 9.5.22
9.4.20 9.5.2011.1 11.1
9.4.21 9.5.2010.711.2 11.2
9.4.23 9.5.2010.911.4 11.4
9.4.24 9.5.2010.1011.5 11.5
9.5.2、9.5.4、9.5.6、9.5.7、9.5.9、9.5.10、9.5.12、9.5.13、9.5.14 9.6.16 9.6.18
9.5.15 9.6.1611.1 11.1
9.5.16 9.6.1610.711.2 11.2
9.5.18 9.6.1610.911.4 11.4
9.5.19 9.6.1610.1011.5 11.5
9.5.21 9.6.1710.1211.712.2 12.2
9.5.22 9.6.1810.1311.812.3 12.3
9.6.1、9.6.2、9.6.3、9.6.5、9.6.6、9.6.8、9.6.9、9.6.10 10.11 10.13
9.6.11 10.1111.1 11.1
9.6.12 10.1111.2 11.2
9.6.14 10.1111.4 11.4
9.6.15 10.1111.5 11.5
9.6.16 10.1111.6 11.6
9.6.17 10.1211.712.2 12.2
9.6.18 10.1311.812.3 12.3
10.1、10.3、10.4、10.5、10.6、10.7、10.9、10.10、10.11 11.6 11.8
10.12 11.712.2 12.2
10.13 11.812.3 12.3
11.1、11.2、11.4、11.5、11.6、11.7 12.2 12.3
11.8 12.3 12.3

現在のソースバージョンの有効なアップグレードターゲットがすべて含まれたリストを取得するには、describe-db-engine-versions CLI コマンドを使用します。以下に例を示します。

export REGION=AWS-Region export ENDPOINT=https://rds.AWS-Region.amazonaws.com aws rds describe-db-engine-versions --engine postgres --region $REGION --endpoint $ENDPOINT --output text --query '*[].ValidUpgradeTarget[?IsMajorVersionUpgrade==`true`].{EngineVersion:EngineVersion}' --engine-version DB-current-version

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

Amazon RDS PostgreSQL の DB インスタンスをアップグレードする際は、次の手順を実行することをお勧めします。

  1. バージョンとの互換性を持つパラメータグループの準備 – カスタムパラメータグループを使用している場合は、2 つのオプションがあります。新しい DB エンジンバージョンのデフォルトのパラメータグループを指定します。または、新しい DB エンジンバージョンの独自のカスタムパラメータグループを作成します。

    新しいパラメータグループを DB インスタンスに関連付ける場合は、アップグレードの完了後にデータベースを再起動します。パラメータグループの変更を適用するためにインスタンスを再起動する必要がある場合、インスタンスのパラメータグループのステータスは pending-reboot と表示されます。インスタンスのパラメータグループのステータスをコンソールで表示するには、describe コマンド (例: describe-db-instances) を使用します。

  2. サポートされていない DB インスタンスクラスを確認する – データベースのインスタンスクラスが、アップグレード先の PostgreSQL バージョンと互換性があることを確認します。詳細については、「DB インスタンスクラスでサポートされている DB エンジン」を参照してください。

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

    • 準備済みのトランザクション – アップグレードを実行する前に、すべての準備済みのトランザクションをコミットまたはロールバックします。

      次のクエリを使用して、開いている準備済みのトランザクションがインスタンスにないことを確認します。

      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    • Reg* データ型 – アップグレードの実施前に reg* データ型の使用をすべて削除します。regtyperegclass を除き、reg* データ型をアップグレードすることはできません。このデータ型は、Amazon RDS でのアップグレードで使用されているため、pg_upgrade ユーティリティで維持することはできません。

      サポートされていない 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');
  4. リードレプリカの処理 –リードレプリカはメジャーバージョンのアップグレードを実行できませんが、リードレプリカのソースインスタンスは実行できます。リードレプリカのソースインスタンスのメジャーバージョンアップグレードを行った場合、そのソースインスタンスのリードレプリカはすべて、以前のエンジンバージョンのままになります。この場合、リードレプリカはソースインスタンスで実行された変更をレプリケートできなくなります。

    ソースインスタンスを別のメジャーバージョンにアップグレードしてから、リードレプリカを昇格させるか、削除後に再作成することをお勧めします。詳細については、「Amazon RDS での PostgreSQL リードレプリカの使用」を参照してください。

  5. バックアップの実行 – データベースの復元ポイントを認識できるように、メジャーバージョンアップグレードを実行する前にはバックアップを実行しておくことをお勧めします。バックアップ保持期間を 0 より大きい値に設定すると、アップグレードプロセスにおいて、アップグレード前後に DB インスタンスの DB スナップショットが作成されます。バックアップ保持期間を変更するには、「Amazon RDS DB インスタンスを変更する」を参照してください。手動でバックアップを実行するには、「DB スナップショットの作成」を参照してください。

  6. メジャーバージョンのアップグレードを実行する前に特定の拡張機能を更新する– アップグレードでメジャーバージョンをスキップする場合、メジャーバージョンのアップグレードに特定の拡張機能を更新する必要があります。バージョン 9.4.x、9.5.x、または 9.6.x からバージョン 11.x へのアップグレードでは、メジャーバージョンがスキップされます。更新する拡張機能は以下のとおりです。

    • address_standardizer

    • address_standardizer_data_us

    • postGIS

    • postgis_tiger_geocoder

    • postgis_topology

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

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

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

  7. メジャーバージョンのアップグレード前の特定の拡張機能の削除 – メジャーバージョンをバージョン 11.x にスキップするアップグレードは、pgRouting 拡張機能の更新をサポートしていません。バージョン 9.4.x、9.5.x、または 9.6.x からバージョン 11.x へのアップグレードでは、メジャーバージョンがスキップされます。pgRouting 拡張機能を削除し、アップグレード後に互換性のあるバージョンに再インストールできます。更新できる拡張機能のバージョンについては、Amazon RDS でサポートされる PostgreSQL の拡張機能とモジュール をご覧ください。

    tsearch2 および chkpass の拡張機能は、PostgreSQL バージョン 11 以降では現在サポートされていません。バージョン 11.x にアップグレードする場合は、アップグレードの前に、tsearch2 および chkpass 拡張機能を削除します。

  8. unknown データ型の削除 – ターゲットのバージョンに応じて、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';
  9. リハーサル更新の実行 – プロダクションデータベースのアップグレードを行う前に、プロダクションデータベースの複製でメジャーバージョンアップグレードをテストすることを強くお勧めします。テストインスタンスの複製を作成するには、データベースを最新スナップショットから復元するか、ポイントインタイムの復元を実行して復元可能な直近の時間でデータベースを復元します。詳細については、「スナップショットからの復元」または「特定の時点への DB インスタンスの復元」を参照してください。アップグレードの実施の詳細については、「エンジンバージョンの手動アップグレード」を参照してください。

    メジャーバージョンのアップグレード中、public データベースと template1 データベース、およびインスタンスのすべてのデータベースの public スキーマは、一時的に名前が変更されます。これらのオブジェクトは、元の名前とランダム文字列を組み合わせた名前でログに表示されます。この文字列は、メジャーバージョンアップグレード時に localeowner などのカスタム設定が保持されるように追加されます。アップグレードが完了したら、これらのオブジェクト名は元の名前に戻ります。

    注記

    メジャーアップグレードのプロセス中に、インスタンスのポイントインタイムの復元を実行することはできません。Amazon RDS でアップグレードが完了すると、インスタンスの自動バックアップが実施されます。ポイントインタイムの復元を実行できるのは、アップグレードの開始前およびインスタンスの自動バックアップ完了後です。

  10. 事前チェック手順エラーでアップグレードが失敗した場合、問題を解決します – メジャーバージョンのアップグレードプロセス中に、Amazon RDS の PostgreSQL は最初に事前チェック手順を実行して、アップグレードの失敗の原因となる可能性のある問題を特定します。事前チェック手順は、インスタンス内のすべてのデータベースにわたって潜在的な互換性のない条件をすべてチェックします。

    事前チェックで問題が発生した場合、アップグレード事前チェックが失敗したことを示すログイベントが作成されます。事前確認プロセスの詳細は、DB インスタンスのすべてのデータベースのpg_upgrade_precheck.log と名前が付けられたアップグレードログにあります。Amazon RDS は、ファイル名にタイムスタンプを追加します。ログの表示の詳細については、「Amazon RDS データベースログファイル」を参照してください。

    事前確認ログで特定されたすべての問題を解決してから、メジャーバージョンのアップグレードを再試行します。事前確認ログの例は次のようになります。

    ------------------------------------------------------------------------ Upgrade could not be run on Wed Apr 4 18:30:52 2018 ------------------------------------------------------------------------- The instance could not be upgraded from 9.6.11 to 10.6 for the following reasons. Please take appropriate action on databases that have usage incompatible with the requested major engine version upgrade and try the upgrade again. * There are uncommitted prepared transactions. Please commit or rollback all prepared transactions.* One or more role names start with 'pg_'. Rename all role names that start with 'pg_'. * The following issues in the database 'my"million$"db' need to be corrected before upgrading:** The ["line","reg*"] data types are used in user tables. Remove all usage of these data types. ** The database name contains characters that are not supported by RDS PostgreSQL. Rename the database. ** The database has extensions installed that are not supported on the target database version. Drop the following extensions from your database: ["tsearch2"]. * The following issues in the database 'mydb' need to be corrected before upgrading:** The database has views or materialized views that depend on 'pg_stat_activity'. Drop the views.
  11. 本番稼働用インスタンスのアップグレード – リハーサルのメジャーバージョンアップグレードに成功すれば、自信を持って本番稼働用のプロダクションデータベースをアップグレードできます。詳細については、「エンジンバージョンの手動アップグレード」を参照してください。

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

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

  • PostgreSQL アップグレードでは、PostgreSQL 拡張機能はアップグレードされません。拡張機能をアップグレードするには、「PostgreSQL の拡張機能のアップグレード」を参照してください。

  • オプションで、Amazon RDS を使用して、pg_upgrade ユーティリティによって作成される 2 つのログを表示できます。pg_upgrade_internal.logpg_upgrade_server.log です。Amazon RDS はこれらのログのファイル名にタイムスタンプを追加します。これらのログも、他のログと同様、表示できます。詳細については、「Amazon RDS データベースログファイル」を参照してください。

    Amazon CloudWatch Logs にアップグレードログをアップロードすることもできます。詳細については、「CloudWatch Logs への PostgreSQL ログの発行」を参照してください。

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

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

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

RDS for PostgreSQL の各メジャーバージョンでは、RDS によって 1 つのマイナーバージョンが自動アップグレードバージョンとして指定されます。Amazon RDS でマイナーバージョンのテストと承認が完了すると、メンテナンスウィンドウの間にマイナーバージョンアップグレードが自動的に行われます。RDS では、新しくリリースされたマイナーバージョンが自動アップグレードバージョンとして自動的に設定されることはありません。RDS によって新しい自動アップグレードバージョンが指定される前に、以下のような複数の基準が考慮されます。

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

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

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

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

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

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

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

  • DB インスタンスの [Auto minor version upgrade (マイナーバージョン自動アップグレード)] オプションは有効になっています。

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

詳細については、「自動的にマイナーエンジンバージョンをアップグレードする」を参照してください。

注記

PostgreSQL のアップグレードでは、PostgreSQL の拡張機能はアップグレードされません。拡張機能をアップグレードするには、「PostgreSQL の拡張機能のアップグレード」を参照してください。

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

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

注記

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

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

ALTER EXTENSION extension_name UPDATE TO 'new_version'

PostgreSQL 拡張機能のサポートされているバージョンのリストについては、「Amazon RDS でサポートされる PostgreSQL の拡張機能とモジュール」を参照してください。

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

SELECT * FROM pg_extension;

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

SELECT * FROM pg_available_extension_versions;