使用 Rust 開發 PostgreSQL 存儲過程

pgxr

使用 Rust 來編寫 PostgreSQL 的擴展函數(至關於存儲過程)。git

項目地址: https://github.com/clia/pgxrgithub

使用這個星球上最快的、高效、安全、有趣的編程語言,來爲世界上功能最強大的開源關係數據庫編寫庫內的程序!sql

試想,當你從數據庫中查詢出 1000 條記錄用於程序處理時,當你的程序是數據庫內的程序時,你根本無需將這 1000 條結果經過 PostgreSQL 的通信協議走網絡傳輸到應用程序裏,在應用程序裏分配這麼大一塊內存來裝這些數據,再來進行處理。你能夠直接讀取數據庫內這 1000 條結果的內存,在上面進行分析,直接進行邏輯處理或是返回結果!數據庫

又或者,你有一個複雜的邏輯,要查詢出一些數據來,根據這些數據進行一些邏輯處理,而後還要更新一些數據,整個過程須要鏈接數據庫次數達到數十次之多。若是你把程序寫在數據庫內,你只須要鏈接一次數據庫!編程

經過把程序寫在數據庫內,你節省了應用程序所須要使用的內存,也節省了數據須要在網絡間傳輸的時間。安全

而最適合用來進行這項工做的開發語言,應該就是 Rust 了!高性能、強表達能力、拒絕程序 BUG、無損耗 C 接口,讓你的程序極速飛馳!同時讓你的開發過程輕鬆愉悅bash

經測試,用 Rust 開發的存儲過程比用 PL/pgSQL 開發的存儲過程要快 30~40 倍之多!網絡

代碼示例

#[macro_use]
extern crate pgxr;

use pgxr::bindings::*;

PG_MODULE_MAGIC!();

PG_FUNCTION_INFO_V1!(pg_finfo_pgxr_example_add_one);

#[no_mangle]
pub extern "C" fn pgxr_example_add_one(fcinfo: FunctionCallInfo) -> Datum
{
	let num = try_return_int!(PG_GETARG_I32(fcinfo, 0));
	PG_RETURN_I32(num + 1)
}

使用方法

git clone https://github.com/clia/pgxr.git
cd pgxr/examples/pgxr_example_add_one
cargo build --release

而後運行 pg_config編程語言

找到 PKGLIBDIR,如 /usr/lib/postgresql/11/lib函數

sudo cp target/release/libpgxr_example_add_one.so /usr/lib/postgresql/11/lib
sudo su - postgres
psql
CREATE FUNCTION pgxr_example_add_one(integer) RETURNS integer
     AS 'libpgxr_example_add_one.so', 'pgxr_example_add_one'
     LANGUAGE C STRICT;
select pgxr_example_add_one(1);

這就是所有了,簡單吧?

玩得開心!

相關文章
相關標籤/搜索