Amazon Relational Database Service
ユーザーガイド

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

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

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

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

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

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

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

注記

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

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

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

PostgreSQL アップグレードでは、PostgreSQL 拡張機能はアップグレードされません。拡張機能をアップグレードするには、ALTER EXTENSION UPDATE コマンドを使用します。たとえば、PostgreSQL DB エンジンを 9.4.x から 9.5.12 にアップグレードするときに PostGIS をアップグレードするには、次のコマンドを実行します。

ALTER EXTENSION POSTGIS UPDATE TO '2.2.5'

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

注記

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

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

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

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

リードレプリカはメジャーバージョンのアップグレードを実行できませんが、リードレプリカのソースインスタンスは実行できます。リードレプリカのソースインスタンスのメジャーバージョンアップグレードを行った場合、そのソースインスタンスのリードレプリカはすべて、以前のエンジンバージョンのままになります。この場合、リードレプリカはソースインスタンスで実行された変更をレプリケートできなくなります。ソースインスタンスを別のメジャーバージョンにアップグレードしてから、リードレプリカを昇格させるか、削除後に再作成することをお勧めします。詳細については、「PostgreSQL リードレプリカの使用」を参照してください。

複数のメジャーバージョンから選択する

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

ソースバージョン メジャーバージョンのターゲット 追加のメジャーバージョンターゲット (PostGIS 拡張なし)
9.3.x 9.4.x
9.3.23 9.4.x、9.5.13 9.6.9
9.3.24 9.4.x、9.5.14 9.6.10
9.3.25 9.4.x、9.5.15 9.6.11
9.4.x 9.5.x
9.4.20 9.5.x 11.1
9.4.21 9.5.x 10.711.2
9.4.23 9.5.x 10.911.4
9.5.x 9.6.x
9.5.15 9.6.x 11.1
9.5.16 9.6.x 10.711.2
9.5.18 9.6.x 10.911.4
9.6.x 10.x
9.6.11 10.x 11.1
9.6.12 10.x 11.2
9.6.14 10.x 11.4
10.x 11.x

重要

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

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

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

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

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

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

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

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

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

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

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

      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');

      注記

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

      SELECT d.datname FROM pg_catalog.pg_database d WHERE d.datallowconn = true;
    • 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');
  • VACUUM の実行 – ダウンタイムを短縮するには、DB インスタンスにアップグレードする前に VACUUM オペレーションを実行します。VACUUM オペレーションを実行しないと、アップグレードにかかる時間が長くなる場合があります。これは、別のメジャーバージョンにアップグレードすると、pg_upgrade ユーティリティによってデータベースにバキューム処理が実行されるためです。

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

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

  • 本稼働インスタンスのアップグレード – リハーサルのメジャーバージョンアップグレードが成功したら、自信を持ってプロダクションデータベースをアップグレードできるはずです。詳細については、「エンジンバージョンの手動アップグレード」を参照してください。

注記

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

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

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

注記

アップグレードを完了したら、ANALYZE オペレーションを実行して pg_statistic テーブルを更新する必要があります。

メジャーバージョンアップグレードが完了したら、すべて期待どおりに動作していることを確認するために、同様のワークロードを持つアップグレードしたデータベース上でアプリケーションをテストすることを検討してください。アップグレードが確認されたら、このテストインスタンスを削除できます。

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