使用 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);
這就是所有了,簡單吧?
玩得開心!