Amazon RDS for PostgreSQL で作成時に指定できるバージョンを調べてみた

2022.03.07

こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。

最近、Amazon RDS for PostgreSQLで作成時に指定できるバージョンが一部廃止されていることを教えてもらいました。 一方で「実際にインスタンス作成時に利用できるバージョンはどうやって確認したらよいのか?」が気になったので調べてみました。

前提

このエントリではAWS CLIを利用しますが、わたしは以下のとおりバージョン2.4.23のAWS CLIを利用しています。

% aws --version
aws-cli/2.4.23 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off

rds describe-db-engine-versions コマンド

AWS CLIにはrds describe-db-engine-versionsというコマンドがあります。

このコマンドでインスタンス作成時に指定できるバージョンが分かるようなので少し試してみました。

DBインスタンスのデフォルトバージョン

まずは、デフォルトのバージョン表示についてです。

以下の公式ドキュメントに記載されているように、rds describe-db-engine-versionsコマンドに--default-onlyオプションを指定して実行すると、DBインスタンス作成時のデフォルトバージョンが確認できます。

% aws rds describe-db-engine-versions --default-only --engine postgres

実際に実行すると以下のようになりました。

% aws rds describe-db-engine-versions --default-only --engine postgres
{
    "DBEngineVersions": [
        {
            "Engine": "postgres",
            "EngineVersion": "13.4",
            "DBParameterGroupFamily": "postgres13",
            "DBEngineDescription": "PostgreSQL",
            "DBEngineVersionDescription": "PostgreSQL 13.4-R1",
            "ValidUpgradeTarget": [
                {
                    "Engine": "postgres",
                    "EngineVersion": "13.5",
                    "Description": "PostgreSQL 13.5-R1",
                    "AutoUpgrade": false,
                    "IsMajorVersionUpgrade": false
                },
                {
                    "Engine": "postgres",
                    "EngineVersion": "14.1",
                    "Description": "PostgreSQL 14.1-R1",
                    "AutoUpgrade": false,
                    "IsMajorVersionUpgrade": true
                }
            ],
            "ExportableLogTypes": [
                "postgresql",
                "upgrade"
            ],
            "SupportsLogExportsToCloudwatchLogs": true,
            "SupportsReadReplica": true,
            "SupportedFeatureNames": [
                "Lambda",
                "s3Export",
                "s3Import"
            ],
            "Status": "available",
            "SupportsParallelQuery": false,
            "SupportsGlobalDatabases": false,
            "MajorEngineVersion": "13",
            "SupportsBabelfish": false
        }
    ]
}

DBEngineVersionDescriptionEngineVersionあたりにバージョン情報が、Statusに利用可否が表示されているのが分かりますね。

2022/03/07現在だと13.4がデフォルトバージョンになるようです。

利用できるバージョンを一覧で表示したい

今度は、これをベースに一覧表示してみたいと思います。

一覧表示をする場合には--queryオプションと、--output tableオプションを利用すると良さそうなので、以下のエントリを参考にさせていただきつつ、試してみました。

--queryオプションには、先程確認した際に利用できそうだったDBEngineVersionDescriptionEngineVersionStatusを含めてみます。また、--output tableと指定することで表形式で出力できます。

実際に試したコマンドは以下のようになります。

% aws rds describe-db-engine-versions \
--engine postgres \
--query 'DBEngineVersions[].[DBEngineVersionDescription,EngineVersion,Status]' \
--output table
-------------------------------------------------
|           DescribeDBEngineVersions            |
+-----------------------+---------+-------------+
|  PostgreSQL 9.6.9-R1  |  9.6.9  |  available  |
|  PostgreSQL 9.6.11-R1 |  9.6.11 |  available  |
|  PostgreSQL 9.6.15-R1 |  9.6.15 |  available  |
|  PostgreSQL 9.6.22-R1 |  9.6.22 |  available  |
|  PostgreSQL 9.6.23-R1 |  9.6.23 |  available  |
|  PostgreSQL 9.6.24-R1 |  9.6.24 |  available  |
|  PostgreSQL 10.17-R1  |  10.17  |  available  |
|  PostgreSQL 10.18-R1  |  10.18  |  available  |
|  PostgreSQL 10.19-R1  |  10.19  |  available  |
|  PostgreSQL 11.1-R1   |  11.1   |  available  |
|  PostgreSQL 11.4-R1   |  11.4   |  available  |
|  PostgreSQL 11.5-R1   |  11.5   |  available  |
|  PostgreSQL 11.6-R1   |  11.6   |  available  |
|  PostgreSQL 11.8-R1   |  11.8   |  available  |
|  PostgreSQL 11.10-R1  |  11.10  |  available  |
|  PostgreSQL 11.12-R1  |  11.12  |  available  |
|  PostgreSQL 11.13-R1  |  11.13  |  available  |
|  PostgreSQL 11.14-R1  |  11.14  |  available  |
|  PostgreSQL 12.6-R1   |  12.6   |  available  |
|  PostgreSQL 12.7-R1   |  12.7   |  available  |
|  PostgreSQL 12.8-R1   |  12.8   |  available  |
|  PostgreSQL 12.9-R1   |  12.9   |  available  |
|  PostgreSQL 13.3-R1   |  13.3   |  available  |
|  PostgreSQL 13.4-R1   |  13.4   |  available  |
|  PostgreSQL 13.5-R1   |  13.5   |  available  |
|  PostgreSQL 14.1-R1   |  14.1   |  available  |
+-----------------------+---------+-------------+

ここで表示されたバージョンが、2022/03/07現在で利用できるバージョンということが分かりました。

利用できなくなったバージョンも含めて表示したい

最後に、利用できなくなったバージョンも含めて表示してみます。

標準だと利用できるバージョンしか表示されないので、--include-allオプションを追加して利用できなくなったバージョンも表示させます。

% aws rds describe-db-engine-versions \
--engine postgres \
--include-all \
--query 'DBEngineVersions[].[DBEngineVersionDescription,EngineVersion,Status]' \
--output table
--------------------------------------------------
|            DescribeDBEngineVersions            |
+-----------------------+---------+--------------+
|  PostgreSQL 9.3.1-R1  |  9.3.1  |  deprecated  |
|  PostgreSQL 9.3.2-R1  |  9.3.2  |  deprecated  |
|  PostgreSQL 9.3.3-R1  |  9.3.3  |  deprecated  |
|  PostgreSQL 9.3.5-R1  |  9.3.5  |  deprecated  |
|  PostgreSQL 9.3.6-R1  |  9.3.6  |  deprecated  |
|  PostgreSQL 9.3.9-R1  |  9.3.9  |  deprecated  |
|  PostgreSQL 9.3.10-R1 |  9.3.10 |  deprecated  |
|  PostgreSQL 9.3.12-R1 |  9.3.12 |  deprecated  |
|  PostgreSQL 9.3.14-R1 |  9.3.14 |  deprecated  |
|  PostgreSQL 9.3.16-R1 |  9.3.16 |  deprecated  |
|  PostgreSQL 9.3.17-R1 |  9.3.17 |  deprecated  |
|  PostgreSQL 9.3.19-R1 |  9.3.19 |  deprecated  |
|  PostgreSQL 9.3.20-R1 |  9.3.20 |  deprecated  |
|  PostgreSQL 9.3.22-R1 |  9.3.22 |  deprecated  |
|  PostgreSQL 9.3.23-R1 |  9.3.23 |  deprecated  |
|  PostgreSQL 9.3.24-R1 |  9.3.24 |  deprecated  |
|  PostgreSQL 9.3.25-R1 |  9.3.25 |  deprecated  |
|  PostgreSQL 9.4.1-R1  |  9.4.1  |  deprecated  |
|  PostgreSQL 9.4.4-R1  |  9.4.4  |  deprecated  |
|  PostgreSQL 9.4.5-R1  |  9.4.5  |  deprecated  |
|  PostgreSQL 9.4.7-R1  |  9.4.7  |  deprecated  |
|  PostgreSQL 9.4.9-R1  |  9.4.9  |  deprecated  |
|  PostgreSQL 9.4.11-R1 |  9.4.11 |  deprecated  |
|  PostgreSQL 9.4.12-R1 |  9.4.12 |  deprecated  |
|  PostgreSQL 9.4.14-R1 |  9.4.14 |  deprecated  |
|  PostgreSQL 9.4.15-R1 |  9.4.15 |  deprecated  |
|  PostgreSQL 9.4.17-R1 |  9.4.17 |  deprecated  |
|  PostgreSQL 9.4.18-R1 |  9.4.18 |  deprecated  |
|  PostgreSQL 9.4.19-R1 |  9.4.19 |  deprecated  |
|  PostgreSQL 9.4.20-R1 |  9.4.20 |  deprecated  |
|  PostgreSQL 9.4.21-R1 |  9.4.21 |  deprecated  |
|  PostgreSQL 9.4.23-R1 |  9.4.23 |  deprecated  |
|  PostgreSQL 9.4.24-R1 |  9.4.24 |  deprecated  |
|  PostgreSQL 9.4.25-R1 |  9.4.25 |  deprecated  |
|  PostgreSQL 9.4.26-R1 |  9.4.26 |  deprecated  |
|  PostgreSQL 9.5.2-R1  |  9.5.2  |  deprecated  |
|  PostgreSQL 9.5.4-R1  |  9.5.4  |  deprecated  |
|  PostgreSQL 9.5.6-R1  |  9.5.6  |  deprecated  |
|  PostgreSQL 9.5.7-R1  |  9.5.7  |  deprecated  |
|  PostgreSQL 9.5.9-R1  |  9.5.9  |  deprecated  |
|  PostgreSQL 9.5.10-R1 |  9.5.10 |  deprecated  |
|  PostgreSQL 9.5.12-R1 |  9.5.12 |  deprecated  |
|  PostgreSQL 9.5.13-R1 |  9.5.13 |  deprecated  |
|  PostgreSQL 9.5.14-R1 |  9.5.14 |  deprecated  |
|  PostgreSQL 9.5.15-R1 |  9.5.15 |  deprecated  |
|  PostgreSQL 9.5.16-R1 |  9.5.16 |  deprecated  |
|  PostgreSQL 9.5.18-R1 |  9.5.18 |  deprecated  |
|  PostgreSQL 9.5.19-R1 |  9.5.19 |  deprecated  |
|  PostgreSQL 9.5.20-R1 |  9.5.20 |  deprecated  |
|  PostgreSQL 9.5.21-R1 |  9.5.21 |  deprecated  |
|  PostgreSQL 9.5.22-R1 |  9.5.22 |  deprecated  |
|  PostgreSQL 9.5.23-R1 |  9.5.23 |  deprecated  |
|  PostgreSQL 9.5.24-R1 |  9.5.24 |  deprecated  |
|  PostgreSQL 9.5.25-R1 |  9.5.25 |  deprecated  |
|  PostgreSQL 9.6.1-R1  |  9.6.1  |  deprecated  |
|  PostgreSQL 9.6.2-R1  |  9.6.2  |  deprecated  |
|  PostgreSQL 9.6.3-R1  |  9.6.3  |  deprecated  |
|  PostgreSQL 9.6.5-R1  |  9.6.5  |  deprecated  |
|  PostgreSQL 9.6.6-R1  |  9.6.6  |  deprecated  |
|  PostgreSQL 9.6.8-R1  |  9.6.8  |  deprecated  |
|  PostgreSQL 9.6.9-R1  |  9.6.9  |  available   |
|  PostgreSQL 9.6.10-R1 |  9.6.10 |  deprecated  |
|  PostgreSQL 9.6.11-R1 |  9.6.11 |  available   |
|  PostgreSQL 9.6.12-R1 |  9.6.12 |  deprecated  |
|  PostgreSQL 9.6.14-R1 |  9.6.14 |  deprecated  |
|  PostgreSQL 9.6.15-R1 |  9.6.15 |  available   |
|  PostgreSQL 9.6.16-R1 |  9.6.16 |  deprecated  |
|  PostgreSQL 9.6.17-R1 |  9.6.17 |  deprecated  |
|  PostgreSQL 9.6.18-R1 |  9.6.18 |  deprecated  |
|  PostgreSQL 9.6.19-R1 |  9.6.19 |  deprecated  |
|  PostgreSQL 9.6.20-R1 |  9.6.20 |  deprecated  |
|  PostgreSQL 9.6.21-R1 |  9.6.21 |  deprecated  |
|  PostgreSQL 9.6.22-R1 |  9.6.22 |  available   |
|  PostgreSQL 9.6.23-R1 |  9.6.23 |  available   |
|  PostgreSQL 9.6.24-R1 |  9.6.24 |  available   |
|  PostgreSQL 10.1-R1   |  10.1   |  deprecated  |
|  PostgreSQL 10.3-R1   |  10.3   |  deprecated  |
|  PostgreSQL 10.4-R1   |  10.4   |  deprecated  |
|  PostgreSQL 10.5-R1   |  10.5   |  deprecated  |
|  PostgreSQL 10.6-R1   |  10.6   |  deprecated  |
|  PostgreSQL 10.7-R1   |  10.7   |  deprecated  |
|  PostgreSQL 10.9-R1   |  10.9   |  deprecated  |
|  PostgreSQL 10.10-R1  |  10.10  |  deprecated  |
|  PostgreSQL 10.11-R1  |  10.11  |  deprecated  |
|  PostgreSQL 10.12-R1  |  10.12  |  deprecated  |
|  PostgreSQL 10.13-R1  |  10.13  |  deprecated  |
|  PostgreSQL 10.14-R1  |  10.14  |  deprecated  |
|  PostgreSQL 10.15-R1  |  10.15  |  deprecated  |
|  PostgreSQL 10.16-R1  |  10.16  |  deprecated  |
|  PostgreSQL 10.17-R1  |  10.17  |  available   |
|  PostgreSQL 10.18-R1  |  10.18  |  available   |
|  PostgreSQL 10.19-R1  |  10.19  |  available   |
|  PostgreSQL 11.1-R1   |  11.1   |  available   |
|  PostgreSQL 11.2-R1   |  11.2   |  deprecated  |
|  PostgreSQL 11.4-R1   |  11.4   |  available   |
|  PostgreSQL 11.5-R1   |  11.5   |  available   |
|  PostgreSQL 11.6-R1   |  11.6   |  available   |
|  PostgreSQL 11.7-R1   |  11.7   |  deprecated  |
|  PostgreSQL 11.8-R1   |  11.8   |  available   |
|  PostgreSQL 11.9-R1   |  11.9   |  deprecated  |
|  PostgreSQL 11.10-R1  |  11.10  |  available   |
|  PostgreSQL 11.11-R1  |  11.11  |  deprecated  |
|  PostgreSQL 11.12-R1  |  11.12  |  available   |
|  PostgreSQL 11.13-R1  |  11.13  |  available   |
|  PostgreSQL 11.14-R1  |  11.14  |  available   |
|  PostgreSQL 12.2-R1   |  12.2   |  deprecated  |
|  PostgreSQL 12.3-R1   |  12.3   |  deprecated  |
|  PostgreSQL 12.4-R1   |  12.4   |  deprecated  |
|  PostgreSQL 12.5-R1   |  12.5   |  deprecated  |
|  PostgreSQL 12.6-R1   |  12.6   |  available   |
|  PostgreSQL 12.7-R1   |  12.7   |  available   |
|  PostgreSQL 12.8-R1   |  12.8   |  available   |
|  PostgreSQL 12.9-R1   |  12.9   |  available   |
|  PostgreSQL 13.1-R1   |  13.1   |  deprecated  |
|  PostgreSQL 13.2-R1   |  13.2   |  deprecated  |
|  PostgreSQL 13.3-R1   |  13.3   |  available   |
|  PostgreSQL 13.4-R1   |  13.4   |  available   |
|  PostgreSQL 13.5-R1   |  13.5   |  available   |
|  PostgreSQL 14.1-R1   |  14.1   |  available   |
+-----------------------+---------+--------------+

すべて表示されました。Statusdeprecatedのレコードが廃止されたバージョンです。

なお、9.3は2013年のリリースなので、Amazon RDS for PostgreSQLの歴史を感じますね。

DBインスタンスのデフォルトバージョンだけを表示したい

ここまでをふまえると、単純にDBインスタンスのデフォルトバージョンだけを表示したい場合は以下のコマンドで表示できますね。

% aws rds describe-db-engine-versions \
--engine postgres \
--default-only \
--query 'DBEngineVersions[].[EngineVersion]' \
--output text
13.4

まとめ

以上、Amazon RDS for PostgreSQL で作成時に指定できるバージョンを調べてみました。

個人的にはAWS CLIはjqコマンドを組み合わせて使うことが多いのですが、今回--query--outputオプションを初めて使ってみて面白かったです。

どなたかのお役に立てば幸いです。それでは!