3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【アップデート】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は、まったくの初見でしたので、新しい言語に触れる良い機会になりました。
勉強も兼ねて、もう少し深堀して触ってみようと思いますので、どうぞお楽しみに!

参考


株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area

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

3
0
0

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
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?