PostgreSQL企业应用——Rust三剑客(pgx)

2023-11-11 00:40

本文主要是介绍PostgreSQL企业应用——Rust三剑客(pgx),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PostgreSQL企业应用——Rust三剑客(pgx)

image.png
Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和类似C++,但是设计者想要在保证性能的同时提供更好的内存安全。
Rust已经逐步开始进入企业应用和操作系统的内核开发,之前听过几次openEuler的双周会,一些内核模块已经或即将使用Rust进行开发,虽然一些现代的开发语言现在还很难撼动传统的C/C++ 地位。但是像go和Rust已经开始在一些领域里面崭露头角。go的目标是取代C,而Rust则号称是C++ 的最佳接班人。
一些大企业已经开始使用Rust进行核心业务的替代,同时也开始替代一些底层的基础库。在数据库领域Rust也逐步开始完善其功能,这个系列的文章主要介绍Rust在PostgreSQL可客户端驱动(rust-postgres)、扩展插件(pgx)和过程语言(plrust)三个方面的应用实践,第一弹——pgx

rust环境搭建

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • cargo 国内镜像源
# 放到 `$HOME/.cargo/config` 文件中
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"# 替换成你偏好的镜像源
replace-with = 'sjtu'
#replace-with = 'ustc'# 清华大学
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"# 中国科学技术大学
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"# 上海交通大学
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"# rustcc社区
[source.rustcc]
registry = "git://crates.rustcc.cn/crates.io-index"
  • rustup 国内镜像源
# 清华大学
RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup# 中国科学技术大学
RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup# 上海交通大学
RUSTUP_DIST_SERVER=https://mirrors.sjtug.sjtu.edu.cn/rust-static/

环境要求

  • rustc (>= 1.52) and cargo
  • cargo install rustfmt
  • git
  • libclang.so
  • A relatively recent GCC which supports -dynamic-list (Linux) or -exported_symbols_list (Mac).
  • Build dependencies for PostgreSQL

范例

1.安装 cargo-pgx

首先,需要安装pgx cargo子命令。在开发和测试过程中使用。

$ cargo install cargo-pgx

2.初始化 pgx

pgx安装后需要进行初始化,初始化过程只需要一次。

$ cargo pgx init

初始化时会下载PostgreSQL的一下几个版本 v14.5, v13.8, v12.12, v11.17, v10.22

image.png

3.创建扩展

$ cargo pgx new mog_ext
$ cd mog_ext/

image.png

  • src/lib.rs
use pgx::*;pg_module_magic!();#[pg_extern]
fn hello_mog_ext() -> &'static str {"Hello, mog_ext"
}#[cfg(any(test, feature = "pg_test"))]
#[pg_schema]
mod tests {use pgx::*;#[pg_test]fn test_hello_mog_ext() {assert_eq!("Hello, mog_ext", crate::hello_mog_ext());}
}#[cfg(test)]
pub mod pg_test {pub fn setup(_options: Vec<&str>) {// perform one-off initialization when the pg_test framework starts}pub fn postgresql_conf_options() -> Vec<&'static str> {// return any postgresql.conf settings that are required for your testsvec![]}
}
  • mog_ext.control
comment = 'mog_ext:  Created by pgx'
default_version = '@CARGO_VERSION@'
module_pathname = '$libdir/mog_ext'
relocatable = false
superuser = false
  • Cargo.toml
[package]
name = "mog_ext"
version = "0.0.0"
edition = "2021"
rust-version = "1.58"[lib]
crate-type = ["cdylib"][features]
default = ["pg13"]
pg10 = ["pgx/pg10", "pgx-tests/pg10" ]
pg11 = ["pgx/pg11", "pgx-tests/pg11" ]
pg12 = ["pgx/pg12", "pgx-tests/pg12" ]
pg13 = ["pgx/pg13", "pgx-tests/pg13" ]
pg14 = ["pgx/pg14", "pgx-tests/pg14" ]
pg_test = [][dependencies]
pgx = "0.4.5"[dev-dependencies]
pgx-tests = "0.4.5"[profile.dev]
panic = "unwind"
lto = "thin"[profile.release]
panic = "unwind"
opt-level = 3
lto = "fat"
codegen-units = 1

4.运行

cargo pgx run pg14

cargo pgx init 时安装了10~14不同的版本,安装在~/.pgx目录下:

image.png

当前启动了两个集簇data-13和data-14。

image.png

在pg14上测试rust插件

image.png

创建并运行插件

image.png

5.安装

cargo pgx install

image.png

pgx会根据当前环境便利的pg_config进行安装,因为我这里是最新的15beta1,版本不匹配因此安装失败。

附录

pgx子命令列表

image.png

这篇关于PostgreSQL企业应用——Rust三剑客(pgx)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/386389

相关文章

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

PostgreSQL如何用psql运行SQL文件

《PostgreSQL如何用psql运行SQL文件》文章介绍了两种运行预写好的SQL文件的方式:首先连接数据库后执行,或者直接通过psql命令执行,需要注意的是,文件路径在Linux系统中应使用斜杠/... 目录PostgreSQ编程L用psql运行SQL文件方式一方式二总结PostgreSQL用psql运

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

第二十四章 rust中的运算符重载

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust中的运算符重载 目录 注意一、前言二、基本使用三、常用运算符四、通用约束 一、前言 C/C++中有运算符重载这一概念,它的目的是让即使含不相干的内容也能通过我们自定义的方法进行运算符操作运算。 比如字符串本身是不能相加的,但由于C++中的String重载了运算符+,所以我们就可以将两个字符串进行相加、但实际

PostgreSQL入门介绍

一、PostgreSQL 背景及主要功能介绍 1、背景 PG数据库,全称为PostgreSQL数据库,是一款开源的关系型数据库管理系统(RDBMS)。其起源可以追溯到20世纪80年代末和90年代初,由加拿大的计算机科学家Michael Stonebraker及其团队在加州大学伯克利分校启动。该项目旨在创建一个强大的、开源的关系型数据库管理系统,作为早期关系型数据库系统Ingres的继承者。Mi