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

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

2025.09.30

いわさです。

先日の 2025 年 9 月 25 日に PostgreSQL 18 がリリースされました。

https://www.postgresql.org/docs/release/18.0/

様々な機能追加がされているのですが、Amazon RDS でのリリースはまだ先です。
しかし、Amazon RDS にはオハイオリージョンにプレビュー環境というものがあり、先行バージョンの検証を行うことが出来ます。

先日のアップデートでこの Amazon RDS のプレビュー環境で PostgreSQL 18 がリリースされています。

https://aws.amazon.com/about-aws/whats-new/2025/09/postgresql-180-amazon-rds-database-preview-environment/

今回プレビュー環境の RDS for PostgreSQL 18 で最新機能をいくつか確認してみましたので紹介します。

作成

RDS コンソールから「データベースプレビュー環境」を選択し、RDS の PostgreSQL をエンジンタイプに選択します。
ちょっとバージョン表記がわかりにくいのですが、今回追加されたのは以下の 「PostgreSQL 18.0-R1」になります。
ちなみにデフォルトで選択されていた「PostgreSQL 18.20250904-R1」は PostgreSQL 18 RC1 です。

AAA40D35-E6B2-4EA4-9FAD-C3899004D565.png

DB パラメータグループも PostgreSQL 18 用のものが適用されていますね。

1DEAB9DB-D0A6-46F5-AB46-4D12B2E9D714.png

接続

「PostgreSQL 18.0-R1」バージョンの構築後に psql で接続してみます。
次のようにサーバーバージョンが 18.0 であることが確認できます。beta や RC1 の場合はここの表記で確認することが出来ます。

			
			% psql -h hoge0930db1.ca0mg86saazc.us-east-2.rds-preview.amazonaws.com -U postgres
Password for user postgres: 
psql (14.15 (Homebrew), server 18.0)
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.

postgres=> 

		

新機能をためす

リリースノートに記載のある最新機能をいくつか試してみましょう。

RETURNING 句で OLD/NEW のサポート

従来から、INSERT や UPDATE などで RETURNING 句を使って更新された内容を取得することが出来ていたのですが、PostgreSQL 18 からは NEW と OLD を使うことで更新前/更新後の情報のどちらにもアクセスできるようになりました。

まずテーブルとレコードをひとつ適当なものを作成します。

			
			postgres=> create table hoge (id integer, value varchar);
CREATE TABLE
postgres=> insert into hoge values (1, 'aaa');
INSERT 0 1

		

ここで UPDATE してみます。
RETURNING 句で OLD と NEW の値を取得してみましょう。

			
			postgres=> update hoge set value = 'bbb' where id = 1 returning old.*, new.*;
 id | value | id | value 
----+-------+----+-------
  1 | aaa   |  1 | bbb
(1 row)

UPDATE 1

		

なるほど、更新前と更新後の情報にアクセスすることが出来ました。
数値であればそのまま差分の計算とか、色々出来そうですね。

UUID v7 生成関数

PostgreSQL では他の DB エンジンと同様に UUID を生成することが出来ます。
今回の PostgreSQL 18 からは標準関数で UUID v7 を生成することが出来るようになりました。

UUID v7 というのは時系列ソートが可能な UUID で、ミリ秒までのタイムスタンプと乱数を組み合わせて生成されるものです。
従来はget_random_uuid()という標準関数で UUID を生成できていたのですが、これは UUID v4 でありランダムで生成されるものでした。

https://www.postgresql.org/docs/current/functions-uuid.html

uuidv7()関数を使うことで UUID v7 の生成が可能になります。
また、get_random_uuid()は引き続き UUID v4 が生成されますが、uuidv4()関数でも生成が可能になります。

次のように UUID v7 を使ってレコードを生成します。

			
			postgres=> create table fuga (id integer, value varchar);
CREATE TABLE
postgres=> insert into fuga values (1, uuidv7());
INSERT 0 1
postgres=> insert into fuga values (2, uuidv7());
INSERT 0 1
postgres=> insert into fuga values (3, uuidv7());
INSERT 0 1
postgres=> insert into fuga values (4, uuidv7());
INSERT 0 1
postgres=> insert into fuga values (5, uuidv7());
INSERT 0 1

		

UUID 順に並び替えてみましょう。

			
			postgres=> select * from fuga order by value;
 id |                value                 
----+--------------------------------------
  1 | 01999776-7324-7c64-878a-b7ae6b3810eb
  2 | 01999776-81e2-7bdf-af04-b711e352f65a
  3 | 01999776-8d62-726e-bc11-1155941c2e9d
  4 | 01999776-98ae-70f4-8a74-6ddf0a39ba31
  5 | 01999776-a42e-7fbc-af5b-8e61c898f449
(5 rows)

postgres=> select * from fuga order by value desc;
 id |                value                 
----+--------------------------------------
  5 | 01999776-a42e-7fbc-af5b-8e61c898f449
  4 | 01999776-98ae-70f4-8a74-6ddf0a39ba31
  3 | 01999776-8d62-726e-bc11-1155941c2e9d
  2 | 01999776-81e2-7bdf-af04-b711e352f65a
  1 | 01999776-7324-7c64-878a-b7ae6b3810eb
(5 rows)

		

おお、良いですね。INSERT した順番になっています。
先頭の 8 文字が同じになるんですね。

ちなみにuuidv4()も使ってみます。

			
			postgres=> truncate fuga;
TRUNCATE TABLE
postgres=> insert into fuga values (1, uuidv4());
INSERT 0 1
postgres=> insert into fuga values (2, uuidv4());
INSERT 0 1
postgres=> insert into fuga values (3, uuidv4());
INSERT 0 1
postgres=> insert into fuga values (4, uuidv4());
INSERT 0 1
postgres=> insert into fuga values (5, uuidv4());
INSERT 0 1
postgres=> select * from fuga order by value;
 id |                value                 
----+--------------------------------------
  2 | 222f2202-15ac-4db1-bf09-5cb2629af6dd
  4 | 2e033373-533c-4513-aded-796336b63901
  5 | 359b8c5a-51e4-4dee-b645-b58979ccf790
  1 | a3f7916f-135b-41c0-9a89-4f3389eead5c
  3 | a775277e-295a-4935-818c-aea68a09bfaf
(5 rows)

		

こちらは生成順は関係なくランダムですね。なるほどね。

さいごに

本日は Amazon RDS のプレビュー環境の RDS for PostgreSQL 18 を使ってみました。

RDS for PostgreSQL 18 の検証を進めたい方はぜひ利用してみてください。
利用にあたってはプレビュー環境の制限事項に注意しましょう。

この記事をシェアする

FacebookHatena blogX

関連記事