[プレビュー] Amazon RDS のプレビュー環境の RDS for PostgreSQL 17 Beta を使ってみた

2024.05.27

いわさです。

Amazon RDS ではベータや RC 版などを中心とするエディションを評価するための、プレビュー環境というものが提供されています。
過去には PostgreSQL 16.0 や MySQL 8.x のイノベーションリリースがプレビュー環境で先行リリースされていました。

そんな RDS プレビュー環境ですが、先日のアップデートで PostgreSQL 17 Beta 1 が使えるようになりました。

PostgreSQL 17 Beta 1

先日 2024 年 5 月 23 日に PostgreSQL 17 Beta 1 のリリースがアナウンスされていました。
それから数日ですが、RDS プレビュー環境でもすぐ使えるようになったようですね。早い。
来たる PostgreSQL 17 の GA に備えて評価目的で利用することは出来ます。(本番環境での利用は非推奨)

上記のハイライトでも触れられていますが、パフォーマンスやセキュリティの改善・強化をはじめ様々なアップデートで盛り込まれています。

作成して接続

早速プレビュー環境上で作成し色々確認してみましょう。

なお、お約束となりますがプレビュー環境の利用にあたっては通常と前提条件が違っていたり制約があったりしますので以下の公式ドキュメントに必ず従ってください。

次のように新しいエンジン「PostgreSQL 17.20240520-R1」が追加されていますね。

インスタンス構築後に接続してみます。

% psql -h hoge0527psql17.ca0mg86saazc.us-east-2.rds-preview.amazonaws.com -U postgres    
Password for user postgres: 
psql (14.11 (Homebrew), server 17beta1)
WARNING: psql major version 14, server major version 17.
         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.

postgres=>

server 17beta1と表示されましたね。

JSON_TABLE を使ってみる

さて、何か新しい機能を試したいところです。
メジャーバージョンアップということで目玉の機能がいくつかありそうですが、リリースノートを見てみると、なんと今回から JSON_TABLE が実装されているようです。

JSON データをテーブル形式に変換する関数ですね。
今まで MySQL や Oracle、SQL Server では標準で対応されていましたが、ついに PostgreSQL の標準機能として実装されるようです。

参考:MySQL :: MySQL 8.0 リファレンスマニュアル :: 12.18.6 JSON テーブル関数

他にも PostgreSQL 17 では JSON 操作周りの機能が充実しているようで、次のドキュメントにも 9.16.3 と 9.16.4 が追加されていました。

上記ドキュメントのサンプルを参考に、テーブルと適当な JSON データを INSERT して JSON_TABLE を使ってみましょう。

データ作成

postgres=> \c hogedb
psql (14.11 (Homebrew), server 17beta1)
WARNING: psql major version 14, server major version 17.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
You are now connected to database "hogedb" as user "postgres".
hogedb=> CREATE TABLE my_films ( js jsonb );
CREATE TABLE
hogedb=> INSERT INTO my_films VALUES (
'{ "favorites" : [
   { "kind" : "comedy", "films" : [
     { "title" : "Bananas",
       "director" : "Woody Allen"},
     { "title" : "The Dinner Game",
       "director" : "Francis Veber" } ] },
   { "kind" : "horror", "films" : [
     { "title" : "Psycho",
       "director" : "Alfred Hitchcock" } ] },
   { "kind" : "thriller", "films" : [
     { "title" : "Vertigo",
       "director" : "Alfred Hitchcock" } ] },
   { "kind" : "drama", "films" : [
     { "title" : "Yojimbo",
       "director" : "Akira Kurosawa" } ] }
  ] }');
INSERT 0 1

データ取得

hogedb=> SELECT jt.* FROM
 my_films,
 JSON_TABLE (js, '$.favorites[*]' COLUMNS (
   id FOR ORDINALITY,
   kind text PATH '$.kind',
   title text PATH '$.films[*].title' WITH WRAPPER,
   director text PATH '$.films[*].director' WITH WRAPPER)) AS jt;
 id |   kind   |             title              |             director             
----+----------+--------------------------------+----------------------------------
  1 | comedy   | ["Bananas", "The Dinner Game"] | ["Woody Allen", "Francis Veber"]
  2 | horror   | ["Psycho"]                     | ["Alfred Hitchcock"]
  3 | thriller | ["Vertigo"]                    | ["Alfred Hitchcock"]
  4 | drama    | ["Yojimbo"]                    | ["Akira Kurosawa"]
(4 rows)

さいごに

本日は Amazon RDS のプレビュー環境の RDS for PostgreSQL 17 Beta を使ってみました。
今後内容が変更となる可能性はありますが、PostgreSQL 17 の評価を RDS で先に行っておきたい方は是非使ってみてください。

最近 RDS プレビュー環境が結構リリースされていて、特に MySQL イノベーションリリースあたりは結構使い所ありそうだなと思ってます。