LoginSignup
0

【アップデート】RDSでPL/Rust を使用してPostgreSQL 関数を作成する

Last updated at Posted at 2023-05-26

はじめに

こんにちは。株式会社ジールの@yakisobapanです。

Amazon RDSにて、Rustを用いたユーザー定義関数の作成ができるようになりましたので、試してみました。

目次

  • アップデート内容
  • アーキテクチャ
  • やってみた
  • 所感

アップデート内容

RDS for PostgreSQLでプログラミング言語”Rust”がサポートされ、Rustを利用した高度なユーザー定義関数の作成ができるようになりました。

Amazon RDS for PostgreSQL が Rust をサポートし、高パフォーマンスのデータベース機能を構築できるようになりました
(2023/05/23 What's New with AWS?より)

アーキテクチャ

簡単に、以下のような構成です。
image.png

やってみた

DBの構築

  • DBインスタンスの作成
    RDSコンソールより、下記の要件でDBインスタンスを作成します。

・DBタイプ:PostgreSQL
・バージョン:PostgreSQL 15.2 以降
・パラメータグループ:カスタム1
 *注釈でも説明していますが、Rustの拡張機能をインストールするため、
  デフォルトではなく、カスタムパラメータグループを指定します。

image.png

PL/Rustのセットアップ

  • plrust 拡張機能のインストール

・下記順序で”DB インスタンスパラメータグループ”リンクを選択します。

 データベース>
 対象のクラスター>
 設定タブ>
 DB インスタンスパラメータグループ>

・検索窓より「shared_preload_libraries」を探し、対象を”✓”し、
 ”パラメータの編集”押下します。

image.png

・”値”に「plrust」を入力し、”変更の保存”を押下します。
image.png

・変更したパラメータを適用するため、”アクション”から、DBを再起動します。

  • 設定の確認

・DB接続後、下記クエリを実行して、
 拡張機能がインストールされているか確認します。

Install Check
SHOW shared_preload_libraries;
  • 関数の実行
    ・Rustを利用して書かれたファンクションを実行してみます。
UDF with 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;

・実行してみると、結果が返されていることがわかります。

image.png

所感

PL/Rustでしかできないようなことは、まだ見い出せていませんが、今回PL/Rustが追加されたことで、間違いなく開発の幅が広がったのではないのでしょうか!

またRustは、まったくの初見でしたので、新しい言語に触れる良い機会になりました。
勉強も兼ねて、もう少し深堀して触ってみようと思いますので、どうぞお楽しみに!

参考

  1. rustの拡張機能をインストールするためには、カスタムパラメータグループを設定する必要があります。
    パラメータグループ>
    パラメータグループの作成
    image.png
    ・デフォルトパラメータグループを使用すると、パラメータ編集時にエラーとなります。
    ⇒ 保存中のエラー: Cannot modify a default parameter group. Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterValue
    image.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0