本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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
設定 PL/Rust
若要在資料庫執行個體上安裝 plrust 延伸模組,請將 plrust 新增至與資料庫執行個體相關聯之資料庫參數群組中的 shared_preload_libraries
參數。安裝 plrust 延伸模組後,您可以建立函數。
若要修改 shared_preload_libraries
參數,您的資料庫執行個體必須與自訂參數群組相關聯。如需建立自訂資料庫參數群組的相關資訊,請參閱 的參數組 RDS。
您可以使用 AWS Management Console 或 安裝 plrust 擴充功能 AWS CLI。
下列步驟假設您的資料庫執行個體與自訂資料庫參數群組相關聯。
在 shared_preload_libraries
參數中安裝 plrust 延伸模組
使用屬於 rds_superuser
群組 (角色) 成員的帳戶完成下列步驟。
登入 AWS Management Console 並在 開啟 Amazon RDS主控台https://console.aws.amazon.com/rds/
。 -
在導覽窗格中,選擇 Databases (資料庫)。
-
選擇資料庫執行個體的名稱以顯示其詳細資訊。
-
開啟資料庫執行個體的組態索引標籤,然後尋找資料庫執行個體參數群組連結。
-
選擇連結以開啟與資料庫執行個體相關聯的自訂參數。
-
在 Parameters (參數) 搜尋欄位中,輸入
shared_pre
以尋找shared_preload_libraries
參數。 -
選擇 Edit parameters (編輯參數) 以存取屬性值。
-
在值欄位中,將 plrust 新增至清單。使用逗號區隔值清單中的項目。
重新啟動資料庫執行個體,以便您對
shared_preload_libraries
參數的變更生效。初始重新啟動可能需要額外的時間才能完成。當執行個體可用時,請驗證 plrust 是否已初始化。使用
psql
連線至資料庫執行個體,然後執行下列命令。SHOW shared_preload_libraries;
您的輸出應該類似以下內容:
shared_preload_libraries -------------------------- rdsutils,plrust (1 row)
在 shared_preload_libraries 參數中安裝 plrust 延伸模組
使用屬於 rds_superuser
群組 (角色) 成員的帳戶完成下列步驟。
使用 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" \ --regionaws-region
-
使用 reboot-db-instance AWS CLI 命令重新啟動資料庫執行個體並初始化 plrust 程式庫。初始重新啟動可能需要額外的時間才能完成。
aws rds reboot-db-instance \ --db-instance-identifier
your-instance
\ --regionaws-region
當執行個體可用時,您可以驗證 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
使用相依性
PL/Rust 限制
根據預設,資料庫使用者無法使用 PL/Rust。若要提供 PL/Rust 的存取權,請以具有 rds_superuser 權限的使用者身分連線,然後執行下列命令:
postgres=> GRANT USAGE ON LANGUAGE PLRUST TO
user
;