メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

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

Amazon Relational Database Service (Amazon RDS) が新バージョンのデータベースエンジンをサポートすると、DB インスタンスをその新バージョンにアップグレードできます。アップグレードには、メジャーバージョンのアップグレードとマイナーバージョンのアップグレードの 2 種類があります。

Amazon RDS は、PostgreSQL の DB インスタンスのメジャーおよびマイナーバージョンアップグレードをサポートしています。

メジャーバージョンのアップグレードには、既存のアプリケーションとの下位互換性のないデータベースの変更が含まれる場合があります。このため、Amazon Relational Database Service (Amazon RDS) ではメジャーバージョンのアップグレードは自動的に適用されません。手動で DB インスタンスを変更する必要があります。メジャーバージョンアップグレードは、インスタンスを変更することによって、手動で開始することができます。ただしメジャーバージョンアップグレードを実行する際に従うべき、お勧めの手順があります。詳細については、「メジャーバージョンアップグレード」を参照してください。

マイナーバージョンアップグレードは、インスタンスを変更することによって手動で開始することができます。また、DB インスタンスの作成時または変更時に [Auto Minor Version Upgrade] オプションを選択し、新しいバージョンが Amazon RDS によってテストおよび承認されたらインスタンスを自動的にアップグレードさせることもできます。

AWS RDS は、PostgreSQL の拡張機能を自動的にアップグレードしません。拡張機能をアップグレードするには、ALTER EXTENSION UPDATE コマンドを使用する必要があります。たとえば、PostgreSQL DB エンジンを 9.4.x から 9.5.x にアップグレードするときに PostGIS アップグレードするには、次のコマンドを実行します。

Copy
ALTER EXTENSION POSTGIS UPDATE TO '2.2.2'

アップグレードの概要

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

注記

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

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

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

メジャーバージョンアップグレード

メジャーバージョンのアップグレードには、以前のバージョンのデータベースと下位互換性のないデータベースの変更が含まれる場合があります。その場合、既存のアプリケーションが適切に動作しなくなることがあります。Amazon RDS では、このような状況を想定してメジャーバージョンのアップグレードを自動的には適用しません。メジャーバージョンのアップグレードを実行するには、手動で DB インスタンスを変更する必要があります。本稼働 DB インスタンスにアップグレードを適用する前に、アップグレードを綿密にテストしてアプリケーションが正常に動作することを確認してください。ベストプラクティスとして、DB スナップショットから作成した復元済みインスタンスのメジャーバージョンアップグレードを実行することをおすすめします。

Amazon RDS は、以下からのインプレースアップグレードをサポートします:

  • PostgreSQL 9.3.x DB インスタンスから PostgreSQL 9.4.x DB インスタンスへ

  • PostgreSQL 9.4.x DB インスタンスから PostgreSQL 9.5.x DB インスタンスへ

  • PostgreSQL 9.5.x DB インスタンスから PostgreSQL 9.6.x DB インスタンスへ

Amazon RDS は pg_upgradehttp://www.postgresql.org/docs/9.4/static/pgupgrade.html のユーティリティを使用して、インスタンスを安全にアップグレードします。

9.3 に対する一部の PostgreSQL マイナーバージョンの更新には、メジャーバージョン 9.4 のリリース後にリリースされたものがあるので、バージョン 9.3.9 から 9.4.1 へアップグレードすることや、バージョン 9.3.10 から 9.4.1 または 9.4.4 へアップグレードすることはできません。

リードレプリカにはメジャーバージョンのアップグレードを実行できません。ソースインスタンスにはメジャーバージョンのアップグレードを実行できますが、すべてのリードレプリカは、以前のエンジンバージョンの読み取り可能なノードとして維持されます。ソースインスタンスをアップグレードした後は、リードレプリカはソースインスタンスで実行された変更をレプリケートできなくなります。ソースインスタンスを別のメジャーバージョンにアップグレードしてから、リードレプリカを昇格させるか、削除後に再作成することをお勧めします。

メジャーバージョンのアップグレードプロセス

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

  1. バージョンとの互換性を持つパラメータグループの準備 – カスタムパラメータグループを使用している場合には、新しい DB エンジンバージョンのデフォルトのパラメータグループを指定するか、新しい DB エンジンバージョンの独自のカスタムパラメータグループを作成する必要があります。新しいパラメータグループを DB インスタンスと関連付けるには、アップグレードの完了後に、顧客主導型のデータベースの再起動が必要となります。パラメータグループの変更を適用するためにインスタンスを再起動する必要がある場合には、インスタンスのパラメータグループのステータスとして pending-reboot が表示されます。インスタンスのパラメータグループのステータスは、AWS コンソールで表示するか、describe-db-instances などの「describe」呼び出しを使用して表示することができます。

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

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

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

      Copy
      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    2. line データ型line データ型は、バージョン 9.4 までの PostgreSQL に完全には実装されていないため、RDS PostgreSQL 9.3 インスタンスをアップグレードする場合には、アップグレードの実行前にすべての line データ型の使用を削除する必要があります。

      各データベースで line データ型が使用されていないことを確認するには、アップグレードを実行する各データベースに対して次のクエリを使用することができます。

      Copy
      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 = 'pg_catalog.line'::pg_catalog.regtype AND c.relnamespace = n.oid AND n.nspname !~ '^pg_temp_' AND n.nspname !~ '^pg_toast_temp_' AND n.nspname NOT IN ('pg_catalog', 'information_schema');

      注記

      インスタンスのすべてのデータベースをリストするには、次のクエリを使用します。

      Copy
      SELECT d.datname FROM pg_catalog.pg_database d WHERE d.datallowconn = true;
    3. Reg* データ型 – これらのデータ型には pg_upgrade と併存できない情報が含まれているので、アップグレードを試行する前にすべての reg* データ型の使用を削除する必要があります。regtype および regclass 以外の reg* データ型はアップグレードできません。アップグレードを実行する前に、すべての使用を削除してください。

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

      Copy
      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. インスタンスをアップグレードする前に、VACUUM オペレーションを実行します。別のメジャーバージョンにアップグレードすると、pg_upgrade ユーティリティはデータベースに対してバキューム処理を実行します。VACUUM オペレーションを実行しないとアップグレードに要する時間が増えて、RDS インスタンスのダウンタイムが長くなる場合があります。

  4. メジャーバージョンアップグレードのリハーサルを実行します。プロダクションデータベースの複製でメジャーバージョンアップグレードをテストしてから、プロダクションデータベースで試行することを強くお勧めします。複製のテストインスタンスを作成するには、データベースを最新スナップショットから復元するか、ポイントインタイムの復元を実行して復元可能な直近の時間でデータベースを復元します。メジャーバージョンアップグレードが完了したら、すべて期待どおりに動作していることを確認するために、同様のワークロードを持つアップグレードしたデータベース上でアプリケーションをテストすることを検討してください。アップグレードが確認されたら、このテストインスタンスを削除できます。

  5. データベースの復元ポイントを認識できるように、メジャーバージョンアップグレードを実行する前にはバックアップを実行しておくことをお勧めします。アップグレードの前後に DB インスタンスの DB スナップショットが作成されます。

  6. プロダクションインスタンスをアップグレードします。リハーサルのメジャーバージョンアップグレードが成功したら、自信を持ってプロダクションデータベースをアップグレードできるはずです。

Amazon RDS では、pg_upgrade ユーティリティによって作成される 2 つのログ、pg_upgrade_internal.log および pg_upgrade_server.log を表示できます。Amazon RDS はこれらのログのファイル名にタイムスタンプを追加します。これらのログも、他のログと同様、表示できます。

アップグレードプロセス中の時点を指定して、インスタンスのポイントインタイムの復元を実行することはできません。アップグレードプロセスでは、RDS はアップグレードの実行後にインスタンスの自動バックアップを実行します。ポイントインタイムの復元を実行できるのは、アップグレードの開始前およびインスタンスの自動バックアップ完了後です。

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

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

マイナーバージョンアップグレードは、マイナーアップグレードが Amazon RDS でテストおよび承認されており、お客様が [Auto Minor Version Upgrade] オプションを選択している場合に、自動的に行われます。その他の場合は、DB インスタンスを手動で変更してマイナーバージョンアップグレードを実行する必要があります。DB インスタンスの作成時または変更時に [Auto Minor Version Upgrade] オプションを選択した場合、Amazon RDS で新バージョンがテストおよび承認されると、インスタンスで自動的にアップグレードされます。

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

AWS マネジメントコンソール

DB エンジンのメジャーバージョンアップグレードを DB インスタンスに適用するには

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

  2. ナビゲーションペインで、[Instances] を選択します。

  3. アップグレードする DB インスタンスのチェックボックスをオンにします。

  4. [Instance Actions] を選択してから、[Modify] を選択します。

  5. [DB Engine Version] で、新しいバージョンを選択します。

  6. すぐにアップグレードするには、[Apply Immediately] を選択します。次のメンテナンス時間までアップグレードを延期するには、[Apply Immediately] の選択を解除します。

  7. [Continue] を選択します。

  8. 変更の概要を確認します。アップグレードを続行するには、[Modify DB Instance] を選択します。アップグレードをキャンセルするには、[Cancel] または [Back] を選択します。

CLI

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

  • --db-instance-identifier – DB インスタンスの名前です。

  • --engine-version – アップグレード先のデータベースエンジンのバージョン番号です。

  • --allow-major-version-upgrade – メジャーバージョンをアップグレードします。

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

Linux、OS X、Unix の場合:

Copy
aws rds modify-db-instance \ --db-instance-identifier <mydbinstance> \ --engine-version <new_version> \ --allow-major-version-upgrade \ --apply-immediately

Windows の場合:

Copy
aws rds modify-db-instance ^ --db-instance-identifier <mydbinstance> ^ --engine-version <new_version> ^ --allow-major-version-upgrade ^ --apply-immediately

API

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

  • DBInstanceIdentifier – DB インスタンスの名前、たとえば mydbinstance です。

  • EngineVersion – アップグレード先のデータベースエンジンのバージョン番号です。

  • AllowMajorVersionUpgrade – メジャーバージョンをアップグレードするには、true に設定します。

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

Copy
https://rds.us-east-1.amazonaws.com/ ?Action=ModifyDBInstance &ApplyImmediately=false &DBInstanceIdentifier=mydbinstance &EngineVersion=new_version &SignatureMethod=HmacSHA256 &SignatureVersion=4 &Version=2013-09-09 &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIADQKE4SARGYLE/20131016/us-east-1/rds/aws4_request &X-Amz-Date=20131016T233051Z &X-Amz-SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date &X-Amz-Signature=087a8eb41cb1ab5f99e81575f23e73757ffc6a1e42d7d2b30b9cc0be988cff97

関連トピック