使用 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);
这就是所有了,简单吧?
玩得开心!