[pgrx开发postgresql数据库扩展]2.安装与开发环境的搭建

news/2024/7/9 20:20:21 标签: 数据库, postgresql, rust

——前文再续,书接上一回。

前言

我上篇文章刚刚写完,pgx就全面改名为了 pgrx……,结果导致我都来不及把以前的文章改过来,所以以后遵循最新的命名方法。

pgrx的开发环境需求

pgrx目前仅支持在linux操作系统上进行开发,并且开发的数据库插件,也仅能用在Linux的PostgreSQL数据库上。

我本地的环境用的是Windows WSL2,即 Windows Subsystem for Linux,你可以通俗的理解为windows系统提供的虚拟机,你要是用vmware安装一个虚拟机,也是阔以的。

系统的基础环境如下:

  • 操作系统版本 : Ubuntu 20.04.5 LTS
  • gcc 版本: 9.4.0
  • Clang版本:10.0.0
  • rust/cargo版本:1.68.0
  • 响应需要开发扩展的postgresql 开发

注意,这里不是最低要求的版本,根据官方文档,最细的环境要求如下:

  • GCC 7.0即以上版本
  • Clang 5.0 即以上版本

不会自己安装的同学,建议使用和我一样的ubuntu系统,我会在文末提供一个完整的安装脚本,你逐步执行一般基本上就可以了。

如果你喜欢折腾的话,欢迎使用其他linux版本……

当所有环境都齐备的情况下,就可以直接安装pgrx开发环境了,得益于Rust的强大的包管理工具cargo,在网络好(重音!)的情况下,仅需要一个命令就可以了:

我这里一共下载和编译了217个包:

全部build完成而且不报错,则表示pgrx安装好了,下面进行初始化设置即可:

因为我机器上有全套环境,所以我全部设置了一圈,具体详细脚本,见附录

然后我们来测试下效果:

首先创建一个测试工程:

以下都是Rust开发的基本功,有兴趣的同学去自学一下,我这就不做基础解释了

首先创建了一个叫做"dxlpgrx"的工程:

cargo pgrx dxlpgrx

PGRX这个框架能够自动生成测试文件和hello 方法,如下所示:

先看看他的配置文件:

配置文件中已经把有关postgresql的所有配置都自动生成了,默认采用pg13版本来进行测试。

然后再看看主体lib.rs逻辑代码:

默认生成了一个叫做hello_dxlpgrx的方法,这个方法就一个句话,输出一个问候语句,那么我们在postgresql里面来执行一下,看看效果:

执行以下测试命令:

cargo pgrx run

这个命令会编译我们的整个程序,并且启动pg的测试命令环境:

编译完成之后,会提示所用的测试环境的各种信息:

下面就可以进入测试了,首先看看这个扩展在pg里面是否可用:

select * from pg_available_extensions;

可以看见,我们创建扩展已经准备就绪了:

下面来安装这个扩展:

CREATE EXTENSION dxlpgrx;

然后可以用pg自定的命令\df来查看扩展函数:

执行函数:

SELECT hello_dxlpgrx();

成功打印出既定信息,则开发环境部署与代码编译均测试成功。

最后给出虾神自己机器上完整安装全套开发环境的脚本,如果你也是Ubuntu 20.04.5 LTS 应该不会有其他问题。

注意,如果不是此版本,可能有些许不同,比如Ubuntu 22.x的版本,有些包就是不一样的,建议初学者使用和我一样的版本。

最后是pgrx的github地址:

https://github.com/tcdi/pgrx

更多具体的信息,大家可以参考官方说明

当然,如果你能等的话,我也会逐步把这个东西讲完,预计十篇文章以上了。

附录:rust 与pgrx开发完整安装脚本

#################################################
#
#脚本在裸装的 Ubuntu 20.04.5 LTS 上测试通过
# by godxia 2023年4月
#
################################################


# 更新apt-get工具与相关的源
apt-get update -y -qq --fix-missing
apt-get install -y wget gnupg apt-utils
echo "deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main" >> /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt update

# 安装必要的工具和环境
apt-get update -y --fix-missing
apt-get install -y curl
apt-get install -y git
apt-get install -y clang-10 
apt-get install -y llvm-10 
apt-get install -y clang gcc make build-essential libz-dev zlib1g-dev strace libssl-dev pkg-config

# 安装postgresql 11 - 15各版本以及服务器开发包
apt-get install -y postgresql-11 postgresql-server-dev-11
apt-get install -y postgresql-12 postgresql-server-dev-12
apt-get install -y postgresql-13 postgresql-server-dev-13
apt-get install -y postgresql-14 postgresql-server-dev-14
apt-get install -y postgresql-15 postgresql-server-dev-15
apt-get install -y ruby ruby-dev rubygems build-essential
gem install --no-document fpm

# 修改用户权限(组名是可以选的,只写用户名也可以)
chown 你的用户名:你用户的组名 -R /usr/lib/postgresql/
chown 你的用户名:你用户的组名 -R /usr/share/postgresql/

# 切换到你的用户下面,安装rust开发环境
su 你的用户名
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y
ENV PATH="$HOME/.cargo/bin:${PATH}"

# 安装cargo-pgrx 开发框架
cargo install --locked cargo-pgrx

# 初始化pgrx开发环境
cargo pgrx init --pg11=/usr/lib/postgresql/11/bin/pg_config --pg12=/usr/lib/postgresql/12/bin/pg_config --pg13=/usr/lib/postgresql/13/bin/pg_config --pg14=/usr/lib/postgresql/14/bin/pg_config --pg15=/usr/lib/postgresql/15/bin/pg_config


http://www.niftyadmin.cn/n/243337.html

相关文章

通过案例来了解响应式开发(HTML,CSS)的视频控件

目录 前言 一、视频控件的使用方法 1.语法 二、部分属性 二、案例举例 三、播放效果 前言 1.本文讲解的响应式开发技术(HTML5CSS3Bootstrap)的HTML5表单等功能方法的代码,这也是很多教材的一个典型案例; 2.本文将讲解涉及到…

Activiti7原生整合和工作流相关概念详解

一、概述 Activiti是一个工作流引擎, Activiti可以将业务系统中复杂的业务流程抽取出来,并用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由Activiti进行管理,减少业务系统由…

Java基础——IO流+字节/字符流使用

IO流 (1)IO流的概述: IO流也称为输入,输出流,就是用来读写数据的。I表示input,是数据从硬盘文件读入到内存的过程,称之输入,负责读。O表示output,是内存程序的数据从内…

FPGA知识阻塞赋值和非阻塞赋值

阻塞赋值与非阻塞赋值在FPGA开发中非常关键,但新手在刚接触这两个概念时容易搞混,导致仿真结果与预想的时序不一样。其实阻塞赋值和非阻塞赋值理解起来很简单。 一、阻塞赋值() 阻塞赋值(blocking assignments&#…

flac格式如何转mp3,3招帮你搞定

flac格式如何转mp3,3招帮你搞定的方法来啦。当你的音频是flac格式是不是很头疼,又不知道怎么转mp3 。然后网上搜索出很多方法又不知道从哪个下手,是不是很疑惑?那今天就来看看小编推荐的方法吧,一定让你眼前一亮&#…

创新,阿里首发微服务实施手册我粉了,原来微服务还可以这样玩

微服务 相信大家在网上会看到很多帖子把分布式跟微服务放在一起讨论。确实,微服务就是一种分布式架构的设计方法。但是,在微服务概念还没有出现之前,分布式这个概念并不能引起人们的强烈关注,如果说自己擅长分布式架构设计&#…

【华为OD机试真题 C++】1052 - 优选核酸检测点 | 机试题+算法思路+考点+代码解析

文章目录 一、题目🔸题目描述🔸输入输出🔸样例1 二、题目解析三、代码参考 作者:KJ.JK 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &…

基于 SpringBoot + Vue 实现的可视化拖拽编辑的大屏项目

今天给小伙伴们分享一个基于 SpringBoot Vue 实现的可视化拖拽编辑的大屏项目; 一、简介 这个是一个开源的一个BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。 多数据源支持,内置mysql、el…