はじめに
こんにちは。株式会社ジールの@yakisobapanです。
Amazon RDSにて、Rustを用いたユーザー定義関数の作成ができるようになりましたので、試してみました。
目次
- アップデート内容
- アーキテクチャ
- やってみた
- 所感
アップデート内容
RDS for PostgreSQLでプログラミング言語”Rust”がサポートされ、Rustを利用した高度なユーザー定義関数の作成ができるようになりました。
Amazon RDS for PostgreSQL が Rust をサポートし、高パフォーマンスのデータベース機能を構築できるようになりました
(2023/05/23 What's New with AWS?より)
アーキテクチャ
やってみた
DBの構築
- DBインスタンスの作成
RDSコンソールより、下記の要件でDBインスタンスを作成します。
・DBタイプ:PostgreSQL
・バージョン:PostgreSQL 15.2 以降
・パラメータグループ:カスタム1
*注釈でも説明していますが、Rustの拡張機能をインストールするため、
デフォルトではなく、カスタムパラメータグループを指定します。

PL/Rustのセットアップ
- plrust 拡張機能のインストール
・下記順序で”DB インスタンスパラメータグループ”リンクを選択します。
データベース>
対象のクラスター>
設定タブ>
DB インスタンスパラメータグループ>
・検索窓より「shared_preload_libraries」を探し、対象を”✓”し、
”パラメータの編集”押下します。
・”値”に「plrust」を入力し、”変更の保存”を押下します。
・変更したパラメータを適用するため、”アクション”から、DBを再起動します。
- 設定の確認
・DB接続後、下記クエリを実行して、
拡張機能がインストールされているか確認します。
SHOW shared_preload_libraries;

- 関数の実行
・Rustを利用して書かれたファンクションを実行してみます。
/*
1~100の中で3で割り切れない数値を配列で出力する
filter_multiplesという関数を作成
*/
CREATE OR REPLACE FUNCTION filter_multiples(a BIGINT[], multiple BIGINT) RETURNS BIGINT[]
IMMUTABLE STRICT
LANGUAGE PLRUST AS
$$
Ok(Some(a.into_iter().filter(|x| x.unwrap() % multiple != 0).collect()))
$$;
WITH gen_values AS (
SELECT ARRAY(SELECT * FROM generate_series(1,100)) as arr) --1-100の数値を生成して配列に格納
SELECT filter_multiples(arr, 3) --filter_multiplesに引数を渡して実行結果を表示
from gen_values;
・実行してみると、結果が返されていることがわかります。
所感
PL/Rustでしかできないようなことは、まだ見い出せていませんが、今回PL/Rustが追加されたことで、間違いなく開発の幅が広がったのではないのでしょうか!
またRustは、まったくの初見でしたので、新しい言語に触れる良い機会になりました。
勉強も兼ねて、もう少し深堀して触ってみようと思いますので、どうぞお楽しみに!
参考
-
rustの拡張機能をインストールするためには、カスタムパラメータグループを設定する必要があります。
パラメータグループ>
パラメータグループの作成
・デフォルトパラメータグループを使用すると、パラメータ編集時にエラーとなります。
⇒ 保存中のエラー: Cannot modify a default parameter group. Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterValue
↩