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

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

PostgreSQL データベースで管理できる 2 つのタイプのアップグレードがあります。

  • OS の更新 - では、Amazon RDS は、セキュリティの修正や OS の変更を適用するために、データベースの基になるオペレーティングシステムの更新が必要になる場合があります。RDS コンソール、AWS Command Line Interface (AWS CLI)、または RDS API を使用して、Amazon RDS に OS の更新を適用するタイミングを指定できます。OS 更新接続の詳細については、「DB インスタンスのアップデートを適用する」を参照してください

  • データベースエンジンの更新 - Amazon RDS が新バージョンのデータベースエンジンをサポートすると、データベースをその新バージョンにアップグレードできます。

このコンテキストのデータベースとは、RDS for PostgreSQL DB インスタンスまたはマルチ AZ DB クラスターです。

PostgreSQL データベースのエンジンアップグレードには、メジャーバージョンアップグレードとマイナーバージョンアップグレードの 2 種類があります。

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

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

リージョン内リードレプリカがある DB インスタンスをアップグレードする場合、Amazon RDS はプライマリ DB インスタンスと共にレプリカもアップグレードします。

Amazon RDS は、マルチ AZ DB クラスターのリードレプリカをアップグレードしません。マルチ AZ DB クラスターのメジャーバージョンアップグレードを実行すると、リードレプリカのレプリケーション状態が終了に変わります。アップグレードの完了後、リードレプリカを手動で削除し、再作成する必要があります。

ヒント

ブルー/グリーンデプロイを使用することで、メジャーバージョンアップグレードに必要なダウンタイムを最小限に抑えることができます。詳細については、「データベース更新のために Amazon RDS ブルー/グリーンデプロイを使用する」を参照してください。

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

それに対して、マイナーバージョンのアップグレードに含まれるのは、既存のアプリケーションとの下位互換性がある変更のみです。マイナーバージョンのアップグレードを手動で行うには、データベースを変更します。または、データベースの作成時または変更時に、[マイナーバージョン自動アップグレード] を有効にすることができます。これにより、Amazon RDS は、新しいバージョンがテストおよび承認されると、データベースを自動的にアップグレードします。ご使用の PostgreSQL データベースでリードレプリカを使用している場合は、ソースインスタンスまたはクラスターをアップグレードする前に、すべてのリードレプリカをアップグレードする必要があります。

データベースがマルチ AZ DB インスタンスデプロイの場合、Amazon RDS はプライマリとスタンバイのインスタンスを同時にアップグレードします。したがって、アップグレードが完了するまでデータベースを使用できない場合があります。データベースがマルチ AZ DB クラスターデプロイの場合、Amazon RDS はリーダー DB インスタンスを一度に 1 つずつアップグレードします。その後、リーダー DB インスタンスの 1 つが新しいライター DB インスタンスに切り替わります。次に、Amazon RDS は、古いライターインスタンス (今ではリーダーインスタンス) をアップグレードします。

注記

マルチ AZ DB インスタンスデプロイのマイナーバージョンアップグレードのダウンタイムは、数分続く場合があります。マルチ AZ DB クラスターは、通常、マイナーバージョンアップグレードのダウンタイムを約 35 秒に短縮します。RDS Proxy と併用すると、ダウンタイムをさらに 1 秒以下に短縮できます。詳細については、「Amazon RDS Proxy の使用」を参照してください。または、ProxySQLPgBouncer、または MySQL 用 AWS JDBC ドライバーなどのオープンソースデータベースプロキシを使用することもできます。

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

データベースエンジンのバージョン、およびデータベースエンジンのバージョンを廃止するためのポリシーの詳細については、Amazon RDS FAQ の「データベースエンジンのバージョン」を参照してください。

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

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

AWS Management Console を使用してデータベースをアップグレードする場合、データベースの有効なアップグレードターゲットが表示されます。次の AWS CLI コマンドを使用して、データベースの有効なアップグレードターゲットを特定することもできます。

Linux、macOS、Unix の場合:

aws rds describe-db-engine-versions \ --engine postgres \ --engine-version version-number \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

Windows の場合:

aws rds describe-db-engine-versions ^ --engine postgres ^ --engine-version version-number ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

例えば、PostgreSQL バージョン 12.13 データベースの有効なアップグレードターゲットを特定するには、次の AWS CLI コマンドを実行します。

Linux、macOS、Unix の場合:

aws rds describe-db-engine-versions \ --engine postgres \ --engine-version 12.13 \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

Windows の場合:

aws rds describe-db-engine-versions ^ --engine postgres ^ --engine-version 12.13 ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

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

注記

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

DB インスタンスのメジャーバージョンアップグレードを実行すると、任意のリージョン内リードレプリカも自動的にアップグレードされます。アップグレードワークフローがスタートされると、リードレプリカは、pg_upgrade がプライマリ DB インスタンスで正常に完了するまで待ちます。次に、プライマリ DB インスタンスのアップグレードは、リードレプリカのアップグレードが完了するまで待ちます。アップグレードが完了するまで停止が発生します。マルチ AZ DB クラスターののメジャーバージョンを実行すると、すべてのリードレプリカのレプリケーション状態が終了に変わります。

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

PostgreSQL のバージョン番号

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

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

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

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

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

RDS 延長サポートのバージョン番号付けの詳細については、「Amazon RDS 延長サポートバージョンの命名規則」を参照してください。

RDS バージョン番号

RDS バージョン番号は major.minor.patch 命名規則を使用します。RDS パッチバージョンには、リリース後にマイナーバージョンに追加された重要なバグ修正が含まれています。RDS 延長サポートのバージョン番号付けの詳細については、「Amazon RDS 延長サポートバージョンの命名規則」を参照してください。

データベースの Amazon RDS バージョン番号を識別するには、まず次のコマンドを使用して rds_tools 拡張機能を作成する必要があります。

CREATE EXTENSION rds_tools;

PostgreSQL バージョン 15.2-R2 のリリース以降、次の SQL クエリを使用して RDS for PostgreSQL データベースの RDS バージョン番号を確認できるようになりました。

postgres=> SELECT rds_tools.rds_version();

例えば、RDS for PostgreSQL 15.2 データベースをクエリすると、次が返されます。

rds_version ---------------- 15.2.R2 (1 row)

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

メジャーバージョンのアップグレードには、以前のバージョンのデータベースと下位互換性のない変更が含まれる場合があります。新しい機能により、既存のアプリケーションが適切に動作しなくなることがあります。このため、Amazon RDS では、メジャーバージョンアップグレードは自動的に適用されません。メジャーバージョンのアップグレードを行うには、データベースを手動で変更します。本稼働データベースにアップグレードを適用する前に、アップグレードを徹底的にテストしてアプリケーションが正常に動作することを確認してください。PostgreSQL メジャーバージョンアップグレードを行うには、「メジャーバージョンのアップグレードを実施する方法」に記載されているステップを実施することをお勧めします。

PostgreSQL シングル AZ DB インスタンスまたはマルチ AZ DB インスタンス配置を次のメジャーバージョンにアップグレードすると、データベースに関連付けられている任意のリードレプリカも次のメジャーバージョンにアップグレードされます。場合によっては、アップグレード時に上位のメジャーバージョンにスキップできます。アップグレードでメジャーバージョンがスキップされると、リードレプリカもターゲットのメジャーバージョンにアップグレードされます。他のメジャーバージョンをスキップするバージョン 11 へのアップグレードには、特定の制限があります。詳細については、メジャーバージョンのアップグレードを実施する方法 で説明する手順を参照してください。

PostgreSQL のほとんどの拡張機能は、PostgreSQL エンジンのアップグレード時にアップグレードされません。拡張機能は、個別にアップグレードする必要があります。詳細については、「PostgreSQL のエクステンションのアップグレード」を参照してください。

次の AWS CLI クエリを実行すると、RDS for PostgreSQL データベースで利用できるメジャーバージョンを確認できます。

aws rds describe-db-engine-versions --engine postgres --engine-version your-version --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

使用可能なすべてのバージョンに対するこのクエリの結果の概要を次の表に示します。バージョン番号のアスタリスク (*) は、バージョンが非推奨であることを示します。現在のバージョンが非推奨の場合は、最新のマイナーバージョンのアップグレードターゲットにアップグレードするか、そのバージョンで利用可能な他のアップグレードターゲットにアップグレードすることをお勧めします。RDS for PostgreSQL バージョン 9.6 の非推奨化の詳細については、「PostgreSQL バージョン 9.6 の廃止」を参照してください。RDS for PostgreSQL バージョン 10 の非推奨化の詳細については、「PostgreSQL バージョン 10 の廃止」を参照してください。

現在のソースバージョン (* 非推奨) 最新のメジャーバージョンアップグレードターゲット その他の利用可能なアップグレードターゲット
16.1 16.2
15.6 16.2
15.5 16.2 16.1 15.6
15.4 16.2 16.1 15.6 15.5
15.3 16.2 16.1 15.6 15.5 15.4
15.2 16.2 16.1 15.6 15.5 15.4 15.3
14.11 16.2 15.6
14.10 16.1 15.6 15.5 14.11
14.9 15.6 15.5 15.4 14.11 14.10
14.8 15.6 15.5 15.4 15.3 14.11 14.10 14.9
14.7 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8
14.6 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7
14.5 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6
14.4 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 14.5
14.3 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4
14.2* 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4 14.3
14.1* 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2
13.14 16.2 15.6 14.11
13.13 16.1 15.5 14.11 14.10 13.14
13.12 15.4 14.11 14.10 14.9 13.14 13.13
13.11 15.3 14.11 14.10 14.9 14.8 13.14 13.13 13.12
13.10 15.2 14.11 14.10 14.9 14.8 14.7 13.14 13.13 13.12 13.11
13.9 14.11 14.10 14.9 14.8 14.7 14.6 13.14 13.13 13.12 13.11 13.10
13.8 14.11 14.10 14.9 14.8 14.7 14.6 14.5 13.14 13.13 13.12 13.11 13.10 13.9
13.7 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4 14.3 13.14 13.13 13.11 13.10 13.9 13.8
13.6* 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2 13.14 13.13 13.11 13.10 13.9 13.8 13.7
13.5* 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2 14.1 13.14 13.13 13.11 13.10 13.9 13.8 13.7 13.6
13.4* 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2 14.1 13.14 13.13 13.11 13.10 13.9 13.8 13.7 13.6 13.5
13.3* 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2 14.1 13.14 13.13 13.11 13.10 13.9 13.8 13.7 13.6 13.5 13.4
13.2*、13.1* 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4 14.3 14.2 14.1 13.14 13.13 13.11 13.10 13.9 13.8 13.7 13.6 13.5 13.4
12.18 16.2 15.6 14.11 13.14
12.17 16.1 15.5 14.10 13.14 13.13 12.18
12.16 15.4 14.9 13.14 13.13 13.12 12.18 12.17
12.15 15.3 14.8 13.14 13.13 13.12 13.11 12.18 12.17 12.16
12.14 15.2 14.7 13.14 13.13 13.12 13.11 13.10 12.18 12.17 12.16 12.15
12.13 14.6 13.14 13.13 13.12 13.11 13.10 13.9 12.18 12.17 12.16 12.15 12.14
12.12 14.5 13.14 13.13 13.12 13.11 13.10 13.9 13.8 12.18 12.17 12.16 12.15 12.14 12.13
12.11 14.4 14.3 13.14 13.13 13.12 13.11 13.10 13.9 13.8 13.7 12.18 12.17 12.16 12.15 12.14 12.13 12.12
12.10 14.2 13.14 13.13 13.12 13.11 13.10 13.9 13.8 13.7 13.6 12.18 12.17 12.16 12.15 12.14 12.13 12.12 12.11
12.9* 14.1 13.14 13.13 13.12 13.11 13.10 13.9 13.8 13.7 13.6 13.5 12.18 12.17 12.16 12.15 12.14 12.13 12.12 12.11 12.10
12.8* 13.14 13.13 13.12 13.11 13.10 13.9 13.8 13.7 13.6 13.5 13.4 12.18 12.17 12.16 12.15 12.14 12.13 12.12 12.11 12.10 12.9
12.7* 13.14 13.13 13.12 13.11 13.10 13.9 13.8 13.7 13.6 13.5 13.4 13.3 12.18 12.17 12.16 12.15 12.14 12.13 12.12 12.11 12.10 12.9 12.8
12.6*、12.5*、12.4*、12.3*、12.2* 13.14 13.13 13.12 13.11 13.7 13.6 12.18 12.17 12.16 12.15 12.14 12.13 12.12 12.11 12.10 12.9 12.8 12.7
11.22 16.1 15.5 14.10 13.13 12.17
11.21* 15.4 14.9 13.12 12.17 12.16 11.22
11.20* 15.3 14.8 13.11 12.17 12.16 12.15 11.22 11.21
11.19* 15.2 14.7 13.10 12.17 12.16 12.15 12.14 11.22 11.21 11.20
11.18* 14.6 13.9 12.17 12.16 12.15 12.14 12.13 11.22 11.21 11.20 11.19
11.17* 14.5 13.8 12.17 12.16 12.15 12.14 12.13 12.12 11.22 11.21 11.20 11.19 11.18
11.16* 14.4 14.3 13.7 12.17 12.16 12.15 12.14 12.13 12.12 12.11 11.22 11.21 11.20 11.19 11.18 11.17
11.15* 14.2 13.6 12.17 12.16 12.15 12.14 12.13 12.12 12.11 12.10 11.22 1121 11.20 11.19 11.18 11.17 11.16
11.14* 14.1 13.5 12.17 12.16 12.15 12.14 12.13 12.12 12.11 12.10 12.9 11.22 11.21 11.20 11.19 11.18 11.17 11.16 11.15
11.13* 13.4 12.17 12.16 12.15 12.14 12.13 12.12 12.11 12.10 12.9 12.8 11.22 11.21 11.20 11.19 11.18 11.17 11.16 11.15 11.14
11.12* 13.3 12.17 12.16 12.15 12.14 12.13 12.12 12.11 12.10 12.9 12.8 12.7 11.22 11.21 11.20 11.19 11.18 11.17 11.16 11.15 11.14 11.13
10.23* 14.6 13.9 12.13 11.22 11.21 11.20 11.19 11.18
10.22* 14.5 13.8 12.12 11.22 11.21 11.20 11.19 11.18 11.17 10.23
10.21* 14.4 14.3 13.7 12.11 11.22 11.21 11.20 11.19 11.18 11.17 11.16 10.23 10.22
10.20* 14.2 13.6 12.10 11.22 11.21 11.20 11.19 11.18 11.17 11.16 11.15 10.23 10.22 10.21
10.19* 14.1 13.5 12.9 11.22 11.21 11.20 11.19 11.18 11.17 11.16 11.15 11.14 10.23 10.22 10.21 10.20
10.18* 13.4 12.8 11.22 11.21 11.20 11.19 11.18 11.17 11.16 11.15 11.14 11.13 10.23 10.22 10.21 10.20 10.19
10.17* 13.3 12.7 11.22 11.21 11.20 11.19 11.18 11.17 11.16 11.15 11.14 11.13 11.12 10.23 10.22 10.21 10.20 10.19 10.18
9.6.24* 14.1 13.5 12.9 11.14 10.20 10.19
9.6.23* 13.4 12.8 11.13 10.20 10.19 10.18 9.6.24
9.6.22* 13.3 12.7 11.12 10.20 10.19 10.18 10.17 9.6.24 9.6.23
9.6.19*、9.6.18*、9.6.17*、9.6.16*、9.6.15*、9.6.14*、9.6.12*、9.6.11*9.6.10*、9.6.9*、9.6.8*、9.6.6*、9.6.5*、9.6.3*、9.6.2*、9.6.1* 9.6.24 14.1 13.5 12.9 11.14 10.20 10.19 9.6.23 9.6.22

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

Amazon RDS for PostgreSQL データベースでメジャーバージョンのアップグレードを実行する場合は、以下のプロセスをお勧めします。

  1. バージョンとの互換性を持つパラメータグループの準備 - カスタムパラメータグループを使用している場合は、2 つのオプションがあります。新しい DB エンジンバージョンのデフォルトのパラメータグループを指定します。または、新しい DB エンジンバージョンの独自のカスタムパラメータグループを作成します。詳細については、「「パラメータグループを使用する」 」および「マルチ AZ DB クラスターの DB クラスターパラメータグループを使用する」を参照してください。

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

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

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

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

      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    • Reg* データ型 - アップグレードの実施前に reg* データ型の使用をすべて削除します。regtyperegclass を除き、reg* データ型をアップグレードすることはできません。このデータ型はアップグレードで使用されているため、 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. 論理レプリケーションスロットの処理 — データベースに論理レプリケーションスロットがある場合、アップグレードは実行できません。論理レプリケーションスロットは通常、データベースからデータレイク、BI ツール、およびその他のターゲットへのテーブルのレプリケートおよび AWS DMS に使用されます。アップグレードする前に、使用中の論理レプリケーションスロットの目的を確認し、削除しても問題ないことを確認してください。論理レプリケーションスロットがまだ使用されている場合は、それらを削除しないでください。また、その場合、アップグレードを続行することはできません。

    論理レプリケーションスロットが不要な場合は、次の SQL を使用して削除できます。

    SELECT * FROM pg_replication_slots; SELECT pg_drop_replication_slot(slot_name);

    pglogical 拡張機能を使用する論理レプリケーション設定でも、メジャーバージョンアップグレードを正常に行うには、スロットを削除する必要があります。pglogical 拡張機能を使用して作成されたスロットを識別して削除する方法については、「RDS for PostgreSQL 用ロジカルレプリケーションスロットの管理」を参照してください。

  5. リードレプリカの処理 - シングル AZ DB インスタンスまたはマルチ AZ DB インスタンス配置のアップグレードでは、プライマリ DB インスタンスと共にリージョン内リードレプリカもアップグレードされます。Amazon RDS は、マルチ AZ DB クラスターのリードレプリカをアップグレードしません。

    リードレプリカを個別にアップグレードすることはできません。個別にアップグレードできるとすると、プライマリインスタンスとレプリカデータベースの PostgreSQL メジャーバージョンが一致しないという状況が生じる可能性があります。ただし、リードレプリカをアップグレードすると、プライマリ DB インスタンスのダウンタイムが増加する場合があります。リードレプリカのアップグレードを防ぐには、レプリカをスタンドアロンインスタンスに昇格させるか、アップグレードプロセスをスタートする前にレプリカを削除します。

    アップグレードプロセスでは、リードレプリカの現在のパラメータグループに基づいて、リードレプリカのパラメータグループが再作成されます。アップグレードの完了後にのみ、リードレプリカを変更してカスタムパラメータグループをリードレプリカに適用できます。リードレプリカの詳細については、「Amazon RDS for PostgreSQL でのリードレプリカの使用」を参照してください。

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

    手動でバックアップを実行するには、「シングル AZ DB インスタンスの DB スナップショットの作成」と「マルチ AZ DB クラスターのスナップショットの作成」を参照してください。

  7. メジャーバージョンのアップグレード前に特定のエクステンションを更新する - アップグレードでメジャーバージョンをスキップする場合、メジャーバージョンのアップグレードに特定のエクステンションを更新する必要があります。例えば、バージョン 9.5.x または 9.6.x からバージョン 11.x 以降へのアップグレードでは、メジャーバージョンがスキップされます。更新する拡張機能には、空間データを処理するための PostGIS および関連する拡張機能が含まれます。

    • address_standardizer

    • address_standardizer_data_us

    • postgis_raster

    • postgis_tiger_geocoder

    • postgis_topology

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

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

    詳細については、「PostgreSQL のエクステンションのアップグレード」を参照してください。PostGIS のアップグレードの詳細については、「ステップ 6: PostGIS 拡張機能を更新する」を参照してください。

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

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

  9. 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';
  10. リハーサル更新の実行 - プロダクションデータベースのアップグレードを行う前に、プロダクションデータベースの複製でメジャーバージョンアップグレードをテストすることを強くお勧めします。複製されたテストデータベースの実行計画を監視して、実行計画のリグレッションが発生していないかどうかを確認し、そのパフォーマンスを評価できます。テストインスタンスの複製を作成するには、データベースを最新スナップショットから復元するか、ポイントインタイムの復元を実行して復元可能な直近の時間でデータベースを復元します。

    詳細については、「スナップショットからの復元」または「特定の時点への DB インスタンスの復元」を参照してください。マルチ AZ DB クラスターについては、「スナップショットからマルチ AZ DB クラスターへの復元」または「マルチ AZ DB クラスターを指定の時点の状態に復元する」を参照してください。

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

    バージョン 9.6 のデータベースをバージョン 10 にアップグレードする場合、PostgreSQL 10 では、デフォルトで並列クエリが有効になることに注意してください。テストデータベースの max_parallel_workers_per_gather パラメータを 2 に変更することで、アップグレードするに並列処理による影響をテストできます。

    注記

    default.postgresql10 DB パラメータグループでは、max_parallel_workers_per_gather パラメータのデフォルト値は 2 です。

    詳細については、「PostgreSQL ドキュメント」の「Parallel Query」(並列クエリ) を参照してください。バージョン 10 で並列処理を無効にするには、max_parallel_workers_per_gather パラメータを 0 に設定します。

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

    注記

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

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

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

    リードレプリカのアップグレードが事前チェックで失敗した場合、失敗したリードレプリカのレプリケーションは中断され、リードレプリカは終了状態になります。リードレプリカを削除し、アップグレードしたプライマリ DB インスタンスに基づいて、新しいリードレプリカを再作成します。

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

    ------------------------------------------------------------------------ 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 for 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.
  12. データベースのアップグレード中にリードレプリカのアップグレードが失敗した場合は、問題を解決します - 失敗したリードレプリカは incompatible-restore 状態になり、レプリケーションはデータベースで終了します。リードレプリカを削除し、アップグレードしたプライマリ DB インスタンスに基づいて、新しいリードレプリカを再作成します。

    注記

    Amazon RDS は、マルチ AZ DB クラスターのリードレプリカをアップグレードしません。マルチ AZ DB クラスターのメジャーバージョンアップグレードを実行すると、リードレプリカのレプリケーション状態が終了に変わります。

    リードレプリカのアップグレードは、次の理由で失敗することがあります。

    • 待機時間が経過してもプライマリ DB インスタンスにキャッチアップできなかった。

    • ストレージ不足、互換性のない復元など、最終状態または互換性のないライフサイクル状態であった。

    • プライマリ DB インスタンスのアップグレードのスタート時に、リードレプリカで別のマイナーバージョンのアップグレードが実行されていた。

    • リードレプリカで互換性のないパラメータを使用していた。

    • リードレプリカがプライマリ DB インスタンスと通信できず、データフォルダを同期できなかった。

  13. 本番稼働用データベースのアップグレード - リハーサルのメジャーバージョンアップグレードに成功すれば、自信を持って本番稼働用のプロダクションデータベースをアップグレードできます。詳細については、「エンジンバージョンの手動アップグレード」を参照してください。

  14. ANALYZE 操作を実行して pg_statistic テーブルを更新します。これは、すべての PostgreSQL データベースのすべてのデータベースに対して行う必要があります。Optimizer の統計情報はメジャーバージョンのアップグレード中には転送されないため、パフォーマンスの問題を回避するためにすべての統計情報を再生成する必要があります。次のようにパラメータを指定せずにコマンドを実行して、現在のデータベース内のすべての標準テーブルの統計情報を生成します。

    ANALYZE VERBOSE;

    VERBOSE フラグはオプションですが、使用することで進行状況を表示できます。詳細については、「PostgreSQL ドキュメント」の「ANALYZE」を参照してください。

    注記

    パフォーマンスの問題を回避するため、アップグレード後にシステムで ANALYZE を実行してください。

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

  • PostgreSQL アップグレードでは、PostgreSQL エクステンションはアップグレードされません。エクステンションをアップグレードするには、「PostgreSQL のエクステンションのアップグレード」を参照してください。

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

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

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

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

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

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

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

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

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

次の AWS CLI コマンドを使用して、特定の AWS リージョン で指定された PostgreSQL マイナーバージョンの現在の自動マイナーアップグレードターゲットバージョンを確認できます。

Linux、macOS、Unix の場合:

aws rds describe-db-engine-versions \ --engine postgres \ --engine-version minor-version \ --region region \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \ --output text

Windows の場合:

aws rds describe-db-engine-versions ^ --engine postgres ^ --engine-version minor-version ^ --region region ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^ --output text

例えば、次の AWS CLI コマンドは、米国東部 (オハイオ) AWS リージョン (us-east-2) の PostgreSQL マイナーバージョン 12.13 の自動マイナーアップグレードターゲットを決定します。

Linux、macOS、Unix の場合:

aws rds describe-db-engine-versions \ --engine postgres \ --engine-version 12.13 \ --region us-east-2 \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \ --output table

Windows の場合:

aws rds describe-db-engine-versions ^ --engine postgres ^ --engine-version 12.13 ^ --region us-east-2 ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^ --output table

以下のような出力が生成されます。

---------------------------------- | DescribeDBEngineVersions | +--------------+-----------------+ | AutoUpgrade | EngineVersion | +--------------+-----------------+ | True | 12.14 | | False | 12.15 | | False | 13.9 | | False | 13.10 | | False | 13.11 | | False | 14.6 | +--------------+-----------------+

この例では、AutoUpgrade 値は、True for PostgreSQL バージョン 12.14 です。したがって、自動マイナーアップグレードターゲットは PostgreSQL バージョン 12.14 であり、出力で強調表示されています。

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

  • データベースは、[マイナーバージョン自動アップグレード] オプションを有効にしています。

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

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

注記

PostgreSQL のアップグレードでは、PostgreSQL のエクステンションはアップグレードされません。エクステンションをアップグレードするには、「PostgreSQL のエクステンションのアップグレード」を参照してください。

PostgreSQL のエクステンションのアップグレード

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

注記

PostGIS 拡張機能の更新については、「PostGIS 拡張機能を使用した空間データの管理 (ステップ 6: PostGIS 拡張機能を更新する)」を参照してください。

pg_repack 拡張機能を更新する場合、拡張機能をドロップしてアップグレードされたデータベースに新しいバージョンを作成します。詳細については、「pg_repack ドキュメント」の「pg_repack installation」(pg_repack のインストール) を参照してください。

エクステンションをアップグレードするには、次のコマンドを使用します。

ALTER EXTENSION extension_name UPDATE TO 'new_version';

PostgreSQL エクステンションのサポートされているバージョンのリストについては、「サポートされている PostgreSQL 拡張機能バージョン」を参照してください。

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

SELECT * FROM pg_extension;

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

SELECT * FROM pg_available_extension_versions;