[アップデート] Amazon Aurora PostgreSQL 15.4 がリリースされたので、Babelfish 3.3 のアップデート内容を確認してみた

2023.10.26

いわさです。

今朝のアップデートで Amazon Aurora PostgreSQL にてバージョン 15.4, 14.9, 13.12, 12.16, 11.21 が利用可能になりました。

そして、Amazon Aurora には Bebelfish という機能があります。
Babelfish を使うと Microsoft SQL Server の T-SQL を理解し同じ通信プロトコルをサポートすることで、SQL Server 用に作成されたアプリケーションを少ないコード変更で Aurora で機能させることができるようになります。
この Babelfish も Aurora PostgreSQL のバージョンアップとともに機能や安定性の強化が継続的に行われておりまして、今回のリリースでは Babelfish 3.3 が使用可能になりました。

新たに何が出来るようになったのかを確認してみます。

Babelfish 3.3 がリリース

今回リリースされた Aurora PostgreSQL バージョンの場合、内包される Babelfish のバージョンは 3.3 になりました。
Babelfish 3.3 のリリース通知は以下です。

いくつか互換性向上のためにサポートされる T-SQL 関数が追加されていたり、安定性の向上や不具合修正がされているようですね。今回のアップデートでは根本的な変更は発生していないようです。

バージョン確認

まずは接続してバージョンなどを確認してみます。
Babelfish を有効化する記事はいくつかあるのでここでは割愛します。

クライアントから psql で接続して情報を確認してみましょう。

% psql -h hoge1026aurorap.cluster-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U postgres -d babelfish_db
Password for user postgres: 
psql (14.9 (Homebrew), server 15.4)
WARNING: psql major version 14, server major version 15.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

babelfish_db=> SELECT aurora_version() AS aurora_version, version() AS postgresql_version, sys.version() AS Babelfish_compatibility, sys.SERVERPROPERTY('BabelfishVersion') AS Babelfish_Version;
 aurora_version |                                       postgresql_version                                        |                           babelfish_compatibility                           | babelfish_version 
----------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------+-------------------
 15.4.0         | PostgreSQL 15.4 on x86_64-pc-linux-gnu, compiled by x86_64-pc-linux-gnu-gcc (GCC) 9.5.0, 64-bit | Babelfish for Aurora PostgreSQL with SQL Server Compatibility - 12.0.2000.8+| 3.3.0
                |                                                                                                 | Oct  4 2023 03:53:09                                                       +| 
                |                                                                                                 | Copyright (c) Amazon Web Services                                          +| 
                |                                                                                                 | PostgreSQL 15.4 on x86_64-pc-linux-gnu (Babelfish 3.3.0)                    | 
(1 row)

Babelfish バージョンが 3.3 であることが確認出来ました。
互換性としてはSQL Server Compatibility - 12.0.2000.8+とされています。SQL Server 2014 以上ということですね。

Microsoft Transact-SQL のサポート関数が追加

Babelfish はエンジン固有の方言を使わずに SQL 標準のみで実装されていればほぼそのまま既存コードが動きます。
ただ、固有の T-SQL 関数もすべてではないのですがサポートされていて、サポートされているものはコード変更なしで動作させることが出来ます。

今回のアップデートでもいくつかの T-SQL 関数がサポートされています。

  • HOST_ID
  • EOMONTH
  • PARSENAME
  • SMALLDATETIMEFROMPARTS

HOST_ID

HOST_ID関数ではクライアントのプロセス ID を取得することが出来ます。

個人的には使ったことないです。

1> select HOST_ID();
2> go
host_id                                                                                                                                                                                                                                                         
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
73087

73087が取得されました。クライアント側のプロセス ID を見てみます。

% ps | grep 'sqlcmd'
73087 ttys006    0:00.04 sqlcmd -S hoge1026aurorap.cluster-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U postgres

なるほど。

日付系の関数を試す

SMALLDATETIMEFROMPARTSEOMONTHもは日付系の関数ですね。
SMALLDATETIMEFROMPARTSは年・月・日・時・分までパラメータを指定して結果を取得する関数で、EOMONTHは入力した日付の月末を取得する関数です。

1> select SMALLDATETIMEFROMPARTS(2023,10,26,6,30);
2> go
smalldatetimefromparts
----------------------
   2023-10-26 06:30:00

(1 rows affected)

1> select EOMONTH(GETDATE());
2> go
eomonth         
----------------
      2023-10-31

(1 rows affected)

より利用頻度の高そうな、DATEFROMPARTSTIMEFROMPARTSは既にサポートされてるみたいです。

1> select DATEFROMPARTS(2023,10,26);
2> go
datefromparts   
----------------
      2023-10-26

(1 rows affected)
1> select TIMEFROMPARTS(6,30,59,0,0);
2> go
timefromparts         
----------------------
      06:30:59.0000000

(1 rows affected)

良いんじゃないか。これ PostgreSQL ですからね。
Babelfish は互換性が全てですからね。サポートされてる関数は多ければ多いほど良いです。

sys.extended_properties のサポート

sys.extended_propertiesも今回からサポートされました。
よくある使い方としてはテーブルやカラムなどを説明するコメントを入力する使い方をしている方は多いのではないでしょうか。

併せてsp_updateextendedpropertysp_dropextendedpropertyfn_listextendedpropertyなどもサポートされています。

カラムの説明をMS_Descriptionに設定してみましょう。

1> CREATE DATABASE hogedb;
2> go
1> use hogedb;
2> go
Changed database context to 'hogedb'.

1> CREATE table hogetbl (fuga int , piyo char (20));
2> EXEC sp_addextendedproperty 'MS_Description', 'fuga description', 'SCHEMA', 'dbo', 'TABLE', 'hogetbl', 'COLUMN', 'fuga';
3> EXEC sp_addextendedproperty 'MS_Description', 'piyo description', 'SCHEMA', 'dbo', 'TABLE', 'hogetbl', 'COLUMN', 'piyo';
4> go

次の記事などを参考にコメントを一覧表示してみます。

良いですね!

さいごに

本日は Amazon Aurora PostgreSQL 15.4 がリリースされたので、Babelfish 3.3 のアップデート内容を確認してみました。

Babelfish 継続的にアップデートされていて良いですね。
互換性も最初のころよりかなり上がっているので、初期のころに導入見送った方もアップデート内容をウォッチしておくと良いですよ。