使用 PL/Rust 以 Rust 語言撰寫 PostgreSQL 函數 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 PL/Rust 以 Rust 語言撰寫 PostgreSQL 函數

PL/Rust 是 Postgre 的受信任 Rust 語言延伸SQL。您可以將其用於可從 呼叫的預存程序、函數和其他程序程式碼SQL。下列版本提供 PL/Rust 語言延伸模組:

  • RDS 適用於 PostgreSQL 16.1 和更新版本 16

  • RDS 適用於 PostgreSQL 15.2-R2 和更新版本 15

  • RDS 適用於 PostgreSQL 14.9 和更新版本 14

  • RDS 適用於 PostgreSQL 13.12 和更新版本 13

如需詳細資訊,請參閱 上的 PL/Rust GitHub。

設定 PL/Rust

若要在資料庫執行個體上安裝 plrust 延伸模組,請將 plrust 新增至與資料庫執行個體相關聯之資料庫參數群組中的 shared_preload_libraries 參數。安裝 plrust 延伸模組後,您可以建立函數。

若要修改 shared_preload_libraries 參數,您的資料庫執行個體必須與自訂參數群組相關聯。如需建立自訂資料庫參數群組的相關資訊,請參閱 的參數組 RDS

您可以使用 AWS Management Console 或 安裝 plrust 擴充功能 AWS CLI。

下列步驟假設您的資料庫執行個體與自訂資料庫參數群組相關聯。

shared_preload_libraries 參數中安裝 plrust 延伸模組

使用屬於 rds_superuser 群組 (角色) 成員的帳戶完成下列步驟。

  1. 登入 AWS Management Console 並在 開啟 Amazon RDS主控台https://console.aws.amazon.com/rds/

  2. 在導覽窗格中,選擇 Databases (資料庫)。

  3. 選擇資料庫執行個體的名稱以顯示其詳細資訊。

  4. 開啟資料庫執行個體的組態索引標籤,然後尋找資料庫執行個體參數群組連結。

  5. 選擇連結以開啟與資料庫執行個體相關聯的自訂參數。

  6. Parameters (參數) 搜尋欄位中,輸入 shared_pre 以尋找 shared_preload_libraries 參數。

  7. 選擇 Edit parameters (編輯參數) 以存取屬性值。

  8. 欄位中,將 plrust 新增至清單。使用逗號區隔值清單中的項目。

  9. 重新啟動資料庫執行個體,以便您對 shared_preload_libraries 參數的變更生效。初始重新啟動可能需要額外的時間才能完成。

  10. 當執行個體可用時,請驗證 plrust 是否已初始化。使用 psql 連線至資料庫執行個體,然後執行下列命令。

    SHOW shared_preload_libraries;

    您的輸出應該類似以下內容:

    shared_preload_libraries -------------------------- rdsutils,plrust (1 row)
在 shared_preload_libraries 參數中安裝 plrust 延伸模組

使用屬於 rds_superuser 群組 (角色) 成員的帳戶完成下列步驟。

  1. 使用 modify-db-parameter-group AWS CLI 命令將 plrust 新增至 shared_preload_libraries 參數。

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=shared_preload_libraries,ParameterValue=plrust,ApplyMethod=pending-reboot" \ --region aws-region
  2. 使用 reboot-db-instance AWS CLI 命令重新啟動資料庫執行個體並初始化 plrust 程式庫。初始重新啟動可能需要額外的時間才能完成。

    aws rds reboot-db-instance \ --db-instance-identifier your-instance \ --region aws-region
  3. 當執行個體可用時,您可以驗證 plrust 是否已初始化。使用 psql 連線至資料庫執行個體,然後執行下列命令。

    SHOW shared_preload_libraries;

    您的輸出應該類似以下內容:

    shared_preload_libraries -------------------------- rdsutils,plrust (1 row)

使用 PL/Rust 建立函數

PL/Rust 會將函數編譯為動態程式庫、載入它,然後執行它。

以下 Rust 函數會從陣列中篩選出倍數。

postgres=> CREATE LANGUAGE plrust; CREATE EXTENSION
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) SELECT filter_multiples(arr, 3) from gen_values;

使用套件搭配 PL/Rust

RDS 對於 PostgreSQL 版本 16.3-R2 和更新版本、15.7-R2 和更新版本 15、14.12-R2 和更新版本 14,以及 13.15-R2 和更新版本,PL/Rust 支援其他條板箱:

  • url

  • regex

  • serde

  • serde_json

RDS 對於 PostgreSQL 15.5-R2 版和更新版本、14.10-R2 版和更新版本 14,以及 13.13-R2 版和更新版本 13,PL/Rust 支援兩個額外的條板箱:

  • croaring-rs

  • num-bigint

從 Amazon RDS for PostgreSQL 15.4、14.9 和 13.12 版開始,PL/Rust 支援下列條板箱:

  • aes

  • ctr

  • rand

這些套件僅支援預設功能。RDS 適用於 PostgreSQL 的新版本可能包含更新版本的板條箱,而且可能不再支援較舊版本的板條箱。

請遵循執行主要版本升級的最佳實務來進行測試,了解您的 PL/Rust 函數是否與新的主要版本相容。如需詳細資訊,請參閱 Amazon RDS使用者指南中的 部落格將 Amazon 升級RDS到 Postgre 主要和次要版本的最佳實務SQL,以及升級 Amazon 的 PostgreSQL 資料庫引擎RDS

使用相依性中提供了建立 PL/Rust 函數時使用相依性的範例。

PL/Rust 限制

根據預設,資料庫使用者無法使用 PL/Rust。若要提供 PL/Rust 的存取權,請以具有 rds_superuser 權限的使用者身分連線,然後執行下列命令:

postgres=> GRANT USAGE ON LANGUAGE PLRUST TO user;