——前文再续,书接上一回。
前言
我上篇文章刚刚写完,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