Aurora PostgreSQL をアップグレードした時の、Babelfish バージョンを確認してみた

2022.07.16

いわさです。

先日、Amazon Aurora PostgreSQL の 14 が登場し、Babelfish のメジャーバージョンも更新されました。

しかし、実は Babelfish のメジャーバージョンに関連して一点以下の注意事項があります。

Currently, you can't upgrade Babelfish DB clusters running on Aurora PostgreSQL 13.7 or older versions to Aurora PostgreSQL 14.3 with Babelfish 2.1.0.

Babelfish version updates - Amazon Aurora

どうやら、Aurora PostgresSQL 13.7 以前で Babelfish を有効化したクラスターを、14.3 にアップグレード出来なくなるようです。

そもそも、Aurora PostgreSQL をアップグレードした時に、Babelfish のバージョンも更新されるのでしょうか。
前述の制限事項も含め、動作検証を行ってみました。

バージョンアップしてみる

Aurora PostgreSQL を構築するわけですが、エンジンバージョンで Babelfish for PostgreSQL がサポートとされているバージョンのみにフィルタリングすることができます。
本日時点でその中の最も低いバージョン 13.4 から試してみたいと思います。

Babelfish バージョンは以下の方法で確認することができます。

babelfish_db=> SELECT aurora_version() AS aurora_version, version() AS postgresql_version, sys.version() AS Babelfish_compatibility, sys.SERVERPROPERTY('BabelfishVersion') AS Babelfish_Version;
-[ RECORD 1 ]-----------+------------------------------------------------------------------------------------------------
aurora_version          | 13.4.4
postgresql_version      | PostgreSQL 13.4 on x86_64-pc-linux-gnu, compiled by x86_64-pc-linux-gnu-gcc (GCC) 7.4.0, 64-bit
babelfish_compatibility | Babelfish for Aurora Postgres with SQL Server Compatibility - 12.0.2000.8                      +
                        | Jun 17 2022 20:50:27                                                                           +
                        | Copyright (c) Amazon Web Services                                                              +
                        | PostgreSQL 13.4 on x86_64-pc-linux-gnu
babelfish_version       | 1.0.0

Aurora PostgresSQL 13.4 の場合だと、Babelfish 1.0.0 がインストールされていました。

ここで、レコメンデーションされているマイナーバージョンアップを行ってみます。ここでは 13.6 が推奨されています。自動アップグレードの対象のものですね。

特に Babelfish に関する設定などは行わず、単純に Aurora PostgreSQL のマイナーバージョンアップを実施するだけです。

バージョンアップ後に先程と同じ方法で Babelfish バージョンを確認してみましょう。

babelfish_db=> SELECT aurora_version() AS aurora_version, version() AS postgresql_version, sys.version() AS Babelfish_compatibility, sys.SERVERPROPERTY('BabelfishVersion') AS Babelfish_Version;
-[ RECORD 1 ]-----------+------------------------------------------------------------------------------------------------
aurora_version          | 13.6.3
postgresql_version      | PostgreSQL 13.6 on x86_64-pc-linux-gnu, compiled by x86_64-pc-linux-gnu-gcc (GCC) 7.4.0, 64-bit
babelfish_compatibility | Babelfish for Aurora Postgres with SQL Server Compatibility - 12.0.2000.8                      +
                        | May 24 2022 20:22:52                                                                           +
                        | Copyright (c) Amazon Web Services                                                              +
                        | PostgreSQL 13.6 on x86_64-pc-linux-gnu
babelfish_version       | 1.2.1

Aurora PostgreSQL 13.6.3 で Babelfish 1.2.1 にバージョンアップされました。
このように、マイナーバージョンの自動アップデートでも Babelfish もあわせて自動アップデートされます。
現在のところ、Babelfish バージョンアップで破壊的変更はされていない認識ですが、Babelfish のバージョンを動かしたくない場合は、Aurora PostgreSQL の自動マイナーバージョンアップをコントロールするようにしましょう。

さて、次は 13.6 から 13.7 に手動でアップグレードします。
こちらはクラスターの変更から行うタイプのものです。

13.7 にアップグレードできたので同じくバージョン確認してみましょう。

babelfish_db=> SELECT aurora_version() AS aurora_version, version() AS postgresql_version, sys.version() AS Babelfish_compatibility, sys.SERVERPROPERTY('BabelfishVersion') AS Babelfish_Version;
-[ RECORD 1 ]-----------+------------------------------------------------------------------------------------------------
aurora_version          | 13.7.1
postgresql_version      | PostgreSQL 13.7 on x86_64-pc-linux-gnu, compiled by x86_64-pc-linux-gnu-gcc (GCC) 7.4.0, 64-bit
babelfish_compatibility | Babelfish for Aurora Postgres with SQL Server Compatibility - 12.0.2000.8                      +
                        | Jun 21 2022 20:20:22                                                                           +
                        | Copyright (c) Amazon Web Services                                                              +
                        | PostgreSQL 13.7 on x86_64-pc-linux-gnu
babelfish_version       | 1.3.1

予想どおりだと思いますが、Aurora PostgreSQL 13.7.1 で Babelfish 1.3.1 となりました。

Babelfish を有効化したクラスターのメジャーバージョンアップ

さて次は、Babelfish を有効化した Aurora PostgreSQL 13 を 14 へメジャーバージョンアップさせてみます。
冒頭でドキュメントで確認したとおり「現時点では出来ない」とされているものです。

こちらはバージョン変更した際に、クラスター変更の確定操作が出来ないですね。

Babelfish をオフして試してみる

Aurora PostgreSQL のドキュメントでは、Babelfish の機能をOFFにする方法が紹介されています。
こちらを使って、Babelfish が有効なクラスターで機能を無効化し、メジャーバージョンアップを試みるとどうなるでしょうか。

方法としては、DBクラスターパラメータグループのrds.babelfish_statusoffに設定することで無効化されます。

変更後すぐに、マネジメントコンソール上は Babelfish がOFFになっているかのような表示に切り替わりました。
しかし、SQLクライアントからはまだ接続出来ました。staticパラメータなので、おそらく再起動したタイミングでデータベースサーバーとしては切り替わるのかなと思います。

そして、メジャーバージョンアップを行います。
先程と異なり、クラスターの変更操作は行うことが出来ました。

しかし、実施後すぐにクラスター更新のロールバック操作が行われてしまいました。

Babelfish を有効化したことがない Aurora PostgreSQL クラスターの 13 から 14 へのアップグレードは問題なく行うことが出来たので、Babelfish を有効化しているクラスターの場合はドキュメントどおりメジャーバージョンアップグレードに失敗する状態と考えて良いのかなと思います。

さいごに

本日は、Aurora PostgreSQL をアップグレードした時の、Babelfish バージョンを確認してみました。

現時点の仕様としてまとめると以下のようになっていました。

  • Aurora PostgreSQL のマイナーバージョンアップと連動して、Babelfish のバージョンも強制的に上がる
  • Babelfish を有効化にしたクラスターのメジャーバージョンアップグレードは出来ない。
  • パラメータグループで Babelfish の機能を無効化してもメジャーバージョンアップグレードには失敗する。

これらの仕様を抑えた上で、どのバージョンで Babelfish を有効化したクラスターを作成するべきか検討したほうが良いですね。
現時点でこの制限事項に該当する場合は、クラスター間でのデータ移行が出来るかを検討することになりそうです。

なお、こちらの制限事項はドキュメント上、Currentlyとされているのでいずれ可能になることを期待したいところですね。