本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 PL/Rust 以 Rust 語言撰寫 PostgreSQL 函數
PL/Rust 是 PostgreSQL 的受信任 Rust 語言延伸模組。您可以將其用於預存程序、函數,以及可從 SQL 呼叫的其他程序性程式碼。下列版本提供 PL/Rust 語言延伸模組:
-
RDS for PostgreSQL 17.1 及更新版本 17
-
RDS for PostgreSQL 16.1 及更新的 16 版本
-
RDS for PostgreSQL 15.2-R2 及更高的 15 版本
-
RDS for PostgreSQL 14.9 及更高的 14 版本
-
RDS for PostgreSQL 13.12 及更高的 13 版本
如需詳細資訊,請參閱 GitHub 上的 PL/Rust
設定 PL/Rust
若要在資料庫執行個體上安裝 plrust 延伸模組,請將 plrust 新增至與資料庫執行個體相關聯之資料庫參數群組中的 shared_preload_libraries
參數。安裝 plrust 延伸模組後,您可以建立函數。
若要修改 shared_preload_libraries
參數,您的資料庫執行個體必須與自訂參數群組相關聯。如需建立自訂資料庫參數群組的相關資訊,請參閱 Amazon RDS 的參數群組。
您可以使用 AWS Management Console 或 安裝 plrust 擴充功能 AWS CLI。
下列步驟假設您的資料庫執行個體與自訂資料庫參數群組相關聯。
在 shared_preload_libraries
參數中安裝 plrust 延伸模組
使用屬於 rds_superuser
群組 (角色) 成員的帳戶完成下列步驟。
登入 AWS Management Console ,並在 https://console.aws.amazon.com/rds/
:// 開啟 Amazon 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 for PostgreSQL 版本 16.3-R2 和更新版本、15.7-R2 和更新版本 15、14.12-R2 和更新版本 14 和更新版本,以及 13.15-R2 和更新版本 13 中,PL/Rust 支援其他條板箱:
-
url
-
regex
-
serde
-
serde_json
在 RDS for 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 for PostgreSQL 版本可能包含更新的套件版本,而且可能不再支援較舊的套件版本。
請遵循執行主要版本升級的最佳實務來進行測試,了解您的 PL/Rust 函數是否與新的主要版本相容。如需詳細資訊,請參閱部落格 Best practices for upgrading Amazon RDS to major and minor versions of PostgreSQL
使用相依性
PL/Rust 限制
根據預設,資料庫使用者無法使用 PL/Rust。若要提供 PL/Rust 的存取權,請以具有 rds_superuser 權限的使用者身分連線,然後執行下列命令:
postgres=> GRANT USAGE ON LANGUAGE PLRUST TO
user
;