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

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

Aurora PostgreSQL 18.4 のリリースに伴い、Babelfish 6.1.0 も同時にリリースされました。今回は FOR XML の ELEMENTS ディレクティブ対応や Multipoint インスタンスなど、新機能の動作を確認してみます。
2026.08.26

いわさです。

先日 Aurora PostgreSQL 18.4 がリリースされました。

https://aws.amazon.com/about-aws/whats-new/2026/08/amazon-aurora-postgresql-18-4-17-10-16-14-15-18-14-23/

今回は PostgreSQL 18.4, 17.10, 16.14, 15.18, 14.23 と複数バージョンが同時にリリースされています。
CVE対応やバグ修正を含むため、できるだけ早めのアップグレードが推奨されています。

コンソールのバージョン選択でも 18.4 が選択可能になっています。

F169A06C-5120-4D58-964F-59DAD938CE23_4_5005_c.jpeg

毎度のことですが、Aurora PostgreSQL の新しいバージョンがリリースされたということは Babelfish バージョンも最新のものがあわせてリリースされています。
前回は 2026年6月の Aurora PostgreSQL アップデート時に Babelfish 6.0 がリリースされ、最新状況を確認していたので今回も確認してみます。

https://dev.classmethod.jp/articles/aurora-postgresql-18-3-babelfish-6-0/

バージョン確認

まずは Babelfish のバージョン確認から行います。ここは psql から確認します。

% psql -h hoge0825-babelfish.cluster-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U postgres -d babelfish_db
Password for user postgres: 
psql (14.15 (Homebrew), server 18.4)
WARNING: psql major version 14, server major version 18.
         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 
----------------+--------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------+-------------------
 18.4.1         | PostgreSQL 18.4 on aarch64-unknown-linux-gnu, compiled by aarch64-unknown-linux-gnu-gcc (GCC) 10.5.0, 64-bit | Babelfish for Aurora PostgreSQL with SQL Server Compatibility - 12.0.2000.8+| 6.1.0
                |                                                                                                              | Aug  7 2026 00:09:46                                                       +| 
                |                                                                                                              | Copyright (c) Amazon Web Services                                          +| 
                |                                                                                                              | PostgreSQL 18.4 on aarch64-unknown-linux-gnu (Babelfish 6.1.0)              | 
(1 row)

Babelfish バージョンは 6.1.0 ですね。今回は Graviton (aarch64) インスタンスで確認しています。

新機能を確認

では Babelfish 6.1.0 で新しく使えるようになった機能を確認してみましょう。
Babelfish のリリースノートは以下です。ここを見るとバージョンごとにどういう機能が追加されるようになったのか確認できます。

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraBabelfish.Updates.html

今回の新機能は以下の4つです。

  • STGeometryType(), STNumPoints(), Parse(), MakeValid(), STMPointFromText() の Geospatial 関数のサポート追加
  • Multipoint インスタンスのサポート追加
  • T-SQL クエリへの Shared Plan Cache サポートの拡張
  • FOR XML RAW および FOR XML PATH での ELEMENTS ディレクティブのサポート追加

Geospatial 系の関数が着実に増えてきていますね。前回の 6.0 で Polygon インスタンスがサポートされ、今回は Multipoint インスタンスが追加されました。
FOR XML の ELEMENTS ディレクティブも今回から使えるようになっています。

FOR XML で ELEMENTS ディレクティブを試す

ELEMENTS ディレクティブは FOR XML の出力で列の値を属性ではなく子要素(サブ要素)として出力するオプションです。

https://learn.microsoft.com/ja-jp/sql/relational-databases/xml/use-raw-mode-with-for-xml?view=sql-server-ver16

SQL Server では FOR XML を使ったXML生成で頻出する構文ですが、これまでの Babelfish では ELEMENTS を指定するとエラーになっていました。

まず ELEMENTS なしの FOR XML RAW の出力を確認してみます。

1> SELECT EmployeeID, Name, Department FROM Employees FOR XML RAW('Employee');
2> go
xml                                                                                                                             
----------------------------------------------------------------
<Employee EmployeeID="1" Name="Tanaka" Department="Engineering"/><Employee EmployeeID="2" Name="Suzuki" Department="Sales"/>

(1 row affected)

属性形式で出力されます。次に ELEMENTS を付けてみましょう。

1> SELECT EmployeeID, Name, Department FROM Employees FOR XML RAW('Employee'), ELEMENTS;
2> go
xml                                                                                                                             
----------------------------------------------------------------
<Employee><EmployeeID>1</EmployeeID><Name>Tanaka</Name><Department>Engineering</Department></Employee><Employee><EmployeeID>2</EmployeeID><Name>Suzuki</Name><Department>Sales</Department></Employee>

(1 row affected)

ELEMENTS ディレクティブを指定することで、各列の値が属性ではなく <Employee> 要素の子要素として出力されるようになりました。
FOR XML PATH でも同様に動作します。

1> SELECT EmployeeID, Name, Department FROM Employees FOR XML PATH('Employee'), ELEMENTS;
2> go
xml                                                                                                                             
----------------------------------------------------------------
<Employee><EmployeeID>1</EmployeeID><Name>Tanaka</Name><Department>Engineering</Department></Employee><Employee><EmployeeID>2</EmployeeID><Name>Suzuki</Name><Department>Sales</Department></Employee>

(1 row affected)

以前の Babelfish バージョンだとこの ELEMENTS ディレクティブが使えずエラーになっていたので、FOR XML でXML生成しているアプリケーションを SQL Server から移行する際にはありがたいですね。

Multipoint と Geospatial 関数を試す

今回追加された Geospatial 関連の機能も確認してみます。

SQL Server では geometry/geography 型で空間データを扱えますが、Babelfish ではバージョンごとに対応する図形の種類(Point → Linestring → Polygon → ...)が順次追加されてきました。
今回の 6.1 では「Multipoint」(複数の点をまとめて1つのジオメトリとして扱う型)が使えるようになっています。
これは pgvector のようなベクトル検索とは別物で、地理空間情報(GIS)の話です。地図上の店舗位置や配送先など、複数の座標をひとまとめに管理するために使います。

1> DECLARE @mp geometry;
2> SET @mp = geometry::STMPointFromText('MULTIPOINT((1 1), (3 3), (5 5))', 0);
3> SELECT @mp.STGeometryType() AS GeometryType, @mp.STNumPoints() AS NumPoints;
4> go
GeometryType                NumPoints  
--------------------------- -----------
MultiPoint                            3
(1 row affected)

STMPointFromText() で Multipoint インスタンスを生成し、STGeometryType() と STNumPoints() で型名とポイント数を取得できています。

Parse() と MakeValid() も試してみます。

1> DECLARE @g geometry;
2> SET @g = geometry::Parse('POINT(10 20)');
3> SELECT @g.STGeometryType() AS GeometryType, @g.STAsText() AS WKT;
4> go
GeometryType                WKT                                                             
--------------------------- ----------------------------------------------------------------
Point                       POINT(10 20)
(1 row affected)

Parse() は WKT(Well-Known Text)形式の文字列から geometry インスタンスを作る関数です。
MakeValid() はデータとしておかしいジオメトリを有効な形に修正してくれる関数で、外部から取り込んだ空間データのクレンジングに使います。

1> DECLARE @invalid geometry;
2> SET @invalid = geometry::Parse('POLYGON((0 0, 2 2, 0 2, 2 0, 0 0))');
3> SELECT @invalid.MakeValid().STAsText() AS ValidWKT;
4> go
ValidWKT                                                                                    
--------------------------------------------------------------------------------------------
MULTIPOLYGON(((2 0,0 0,1 1,2 0)),((2 2,1 1,0 2,2 2)))
(1 row affected)

上の例では頂点の順番的に辺同士が交差してしまっている不正なポリゴンを渡しています。MakeValid() はこれを有効なジオメトリに変換してくれます。
外部システムから取り込んだ空間データが不正な場合のクレンジング用途で使う関数です。

さいごに

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

FOR XML の ELEMENTS ディレクティブが使えるようになったのと、Geospatial まわりで Multipoint や MakeValid() などが追加されたのが今回の目玉です。
リリースノートを確認すると新機能のほかにもクラッシュ修正やメモリ管理の改善が多数含まれているので、Babelfish をお使いの方はバージョンアップを検討されてみてください。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事