今天开始研究pgrs写pg扩展. 这是postgres is everything数据组合流派核心功法,近期duckdb,zombodb,datafusion等等产品都是数据组合流思路体现, 把这套功法练到大成,处于2024年,综合数据规模/相应速度/和数据应用层解耦,就有了一个最佳答案. 比以前hadoop,spark那套鬼真的好很多. 应用层面对的是老朋友pg,写的也是熟悉的sql,.但是可以去操作parquet,mysql,mongodb,甚至搜索引擎数据,而且性能不存在理论短板,就说以目前技术水平,都是零成本.
网上资料较少,中文基本没有,英文也很少. 摸索了一上午,跑通了hello world,记录下,后面就是深入的事情. 本文不搬运所有细节,大概把关键坑说出来.
- wsl 以及rust 安装自己查,注意此刻不需要安装pg,开发也不需要安装pg,pgrs自动把改安装的都安装了,还是多版本安装
- 按照 https://github.com/pgcentralfoundation/pgrx 一路创建项目,我就不搬运了. 创建的项目自带hello_first
- 如何验证代码? 运行 cargo pgrx run pg14 ,此刻进入了一个psql环境.注意这个pg14环境就是给你写代码的,和你真正运行的数据库没关系. 所有的psql关于pg拓展有这么几个基本命令可以使用:
- SELECT * FROM pg_available_extensions; 显示
- create extention xxx;注意是项目文件夹名称
- drop extention xxx ;
- 当你create了后select hello_first(); 就可以验证刚才代码.
4 如何把拓展拷贝到真正的环境:
- 方法1 安装postgres后,版本对好, 把上面代码cargo pgrs package,找到对应的.sql和.control两个文件,这就是拓展,拷贝到/usr/share/postgresql/14/extension
- 方法2 直接cargo pgrs install 他帮帮你拷贝了. 但可能有权限问题.
5 wsl的pg,win如何访问?
- 设置密码 sudo passwd postgres
- /etc posgresql.conf listen “*”
- pg_hba.conf host all all 0.0.0.0/0 trust
6 如何配置vscode ? 用wsl拓展
7 如何使用py调用拓展:
import sqlalchemy as sa
engine = sa.create_engine('postgresql+psycopg2://postgres:a@172.20.196.29:5432/wq',pool_recycle=3600, pool_size=80, max_overflow=0)
query = sa.select(sa.func.hello_first().label('hello_res'))
with engine.connect() as conn:
rows = conn.execute(query)
for row in rows:
print(row.hello_res)