资讯动态

PostgreSQL插件(一):PGVector、PostgresML、Apache AGE

发布时间:2026/10/2 2:28:28 来源:尧图企业网站定制
概述最强大的开源关系型数据库大概率就是PostgreSQL下文简称PG。而PG的强大不仅在于它稳定可靠的关系型能力更在于它拥有极其丰富的扩展插件生态从向量检索、图数据库到机器学习几乎都能在数据库内部直接搞定无需额外部署一堆独立组件。这篇文章就来盘点几个让PG变身「AI数据库」的重量级扩展PGVector向量检索、Apache AGE图数据库、PostgresML机器学习、Arrow Flight SQL Adapter高性能列存传输。它们各有侧重组合起来几乎能覆盖当下主流AI应用的后端存储与计算需求。PGVector开源GitHub23.2K Star1.3K Fork、CPerl语言实现增加向量类型与向量相似度检索能力不用单独部署独立向量库是目前 RAG、语义检索最主流方案之一作者ankane 。扩展内部名字叫 vector创建扩展语句是CREATE EXTENSION vector。能力向量数据类型vector(N)单精度浮点向量最多16000维halfvec(N)半精度FP16节省内存0.7sparsevec(N)稀疏向量bit二进制向量支持汉明距离、雅卡尔距离距离算子运算符距离适用场景-L2欧氏距离通用相似度余弦距离文本Embedding最常用#负内积归一化向量最大内积检索L1曼哈顿距离~汉明距离bit向量图像哈希%Jaccard距离集合/二进制两种 ANN 近似索引HNSW图索引召回高、查询快建索引慢、内存占用高适合百万级向量生产首选ivfflat倒排聚类索引建索引快、内存小召回略低适合冷数据、大批量导入场景支持精确KNN检索不建索引全表扫描小数据集完美复用PG能力ACID事务、JOIN、WHERE过滤、JSONB、分区、备份、权限可以向量 业务数据同库做混合检索过滤后向量召回优点架构简单已有PG直接加扩展不用维护额外向量数据库支持带业务条件过滤的向量检索如WHERE categoryxxx ORDER BY embedding ...这是很多独立向量库短板SQL原生和LangChain、LlamaIndex生态集成成熟事务保证向量和业务数据强一致局限数十亿超大向量规模性能弱于Pinecone、Milvus等专用向量库超大场景可用 pgvectorscale 增强HNSW索引内存开销大更新频繁场景索引维护成本高高维向量存储占用较高适用场景RAG知识库、LLM私有文档问答文本语义搜索、图片检索商品推荐、用户特征召回异常检测、向量聚类分析生态集成LangChain、LlamaIndex、Spring AI、Dify、Supabase、云厂商AWS RDS、Azure、阿里云PolarDB、腾讯云PG大多原生预装PGVector。实战-- 1. 开启扩展CREATEEXTENSIONIFNOTEXISTSvector;-- 2. 建表embedding 为1536维OpenAI text-embedding-ada-002CREATETABLEdocuments(id bigserialPRIMARYKEY,contenttext,embedding vector(1536));-- 3. 插入向量INSERTINTOdocuments(content,embedding)VALUES(pgvector介绍,[0.1,0.2,0.3,...]);-- 4. 余弦相似度检索RAG常用SELECTid,content,1-(embedding[0.1,0.2,...])ASsimilarityFROMdocumentsORDERBYembedding[0.1,0.2,...]LIMIT5;-- 5. 创建HNSW索引加速检索CREATEINDEXONdocumentsUSINGhnsw(embedding vector_cosine_ops);PostgresML官网简称PGMLRustJavaScriptHTML开发、开源GitHub6.8K Star364 Fork插件把机器学习、LLM、向量能力直接内置在数据库内部在数据原地做训练、微调、推理不用把数据导出到单独Python/模型服务、独立向量库。能力传统表格机器学习内置47种分类/回归算法XGBoost、LightGBM、随机森林、线性模型等直接用SQLpgml.train()在库内训练模型、预测做结构化数据建模。HuggingFace深度集成NLP/LLM直接在SQL调用HF Hub模型文本嵌入、情感分析、问答、摘要、翻译、文本生成、LLM微调。RAG全链路内置文本分块chunk→生成嵌入→向量检索底层集成PGVector→重排→提示词生成整套RAG都在PG里完成。GPU加速支持NVIDIA CUDA嵌入和LLM推理GPU加速官方宣称相比HTTP模型服务推理速度提升数倍。向量检索兼容PGVector可做向量相似度搜索能直接把业务数据、向量、模型存在同一张库。架构思想数据不动模型计算移动到数据侧传统方案PG→导出数据→Python/模型服务→向量库→业务服务多次数据拷贝、延迟、隐私风险PGML数据、向量、模型全部保存在PGSQL函数直接触发训练/推理减少跨服务数据传输适合RAG、推荐、预测类业务适合RAG知识库、数据库内实时预测、中小模型推理、不想维护多个独立AI服务的团队。不适合超大模型70B推理、大规模离线分布式训练GPU资源占用高生产环境要单独评估资源隔离。对比PGVectorPGVector只做向量存储相似度检索不包含模型、embedding生成、LLM、表格ML需要外部服务生成向量PGML完整ML扩展自带模型加载、embedding、LLM推理、传统机器学习训练底层可以复用PGVector做向量搜索实战-- 加载扩展CREATEEXTENSION pgml;-- 用HF模型生成文本embeddingSELECTpgml.transform(feature-extraction,all-MiniLM-L6-v2,Hello PostgresML);-- 训练表格预测模型SELECTpgml.train(project_namesales_prediction,taskregression,relation_namesales_data,y_column_namerevenue);Apache AGE官网开源GitHub4.9K Star 529 Fork、C语言实现、PostgreSQL扩展插件让PG同时具备关系数据库属性图数据库能力支持OpenCypher图查询语言一份存储同时跑SQL和图查询。多模数据库不需要独立部署一套图数据库复用PG整套生态事务、备份、复制、索引、权限。A Graph Extension缩写源自 Bitnine 公司 AgensGraph2020 进入 Apache 孵化器2022 毕业成为 Apache 顶级开源项目特性SQLOpenCypher混合查询Cypher语句封装在cypher()SQL函数内可以SQL和图查询互相嵌套关系表数据与图数据联合分析完整 ACID 事务完全复用PG 存储引擎图操作同样支持事务、MVCC多图实例同一个库中可以创建多张独立 Graph 图谱丰富驱动Python / Go / Java (JDBC) / NodeJS 客户端驱动内置导入工具agload支持从 CSV 批量导入顶点、边构建图谱支持变长路径遍历、最短路径、模式匹配等图分析能力实战-- 1. 开启扩展CREATEEXTENSIONIFNOTEXISTSage;-- 加载 AGE 到当前数据库AGE 要求显式加载到 search_pathLOADage;SETsearch_pathag_catalog,$user,public;-- 2. 创建图Graph-- 创建一个名为 social 的图用于存放社交关系数据SELECTcreate_graph(social);-- 3. 插入顶点Vertex-- 创建人物节点每个节点带 name 属性SELECT*FROMcypher(social,$$CREATE(a:Person {name:Alice,age:30}),(b:Person {name:Bob,age:28}),(c:Person {name:Carol,age:32}),(d:Person {name:Dave,age:35})$$)AS(result agtype);-- 4. 插入边Edge-- 建立朋友关系Alice-Bob、Alice-Carol、Bob-Dave、Carol-DaveSELECT*FROMcypher(social,$$MATCH(a:Person {name:Alice}),(b:Person {name:Bob})CREATE(a)-[:FRIEND_OF {since:2015}]-(b)$$)AS(result agtype);SELECT*FROMcypher(social,$$MATCH(a:Person {name:Alice}),(c:Person {name:Carol})CREATE(a)-[:FRIEND_OF {since:2018}]-(c)$$)AS(result agtype);SELECT*FROMcypher(social,$$MATCH(b:Person {name:Bob}),(d:Person {name:Dave})CREATE(b)-[:FRIEND_OF {since:2020}]-(d)$$)AS(result agtype);SELECT*FROMcypher(social,$$MATCH(c:Person {name:Carol}),(d:Person {name:Dave})CREATE(c)-[:FRIEND_OF {since:2019}]-(d)$$)AS(result agtype);-- 5. 使用 cypher() 执行 OpenCypher 查询-- 5.1 查找 Alice 的所有朋友SELECT*FROMcypher(social,$$MATCH(p:Person {name:Alice})-[:FRIEND_OF]-(friend)RETURNfriend.nameASfriend_name $$)AS(friend_name agtype);-- 5.2 查找朋友的朋友二度关系SELECT*FROMcypher(social,$$MATCH(p:Person {name:Alice})-[:FRIEND_OF]-()-[:FRIEND_OF]-(fof)RETURNDISTINCTfof.nameASfriend_of_friend $$)AS(friend_of_friend agtype);-- 5.3 查找所有人的朋友数量聚合查询SELECT*FROMcypher(social,$$MATCH(p:Person)-[:FRIEND_OF]-()RETURNp.nameASname,count(*)ASfriend_countORDERBYfriend_countDESC$$)AS(name agtype,friend_count agtype);-- 6. SQL 与图查询混合使用-- 6.1 图查询结果与关系表 JOIN-- 先建一张普通关系表存储用户注册信息CREATETABLEuser_registration(nametextPRIMARYKEY,registered_atdate);INSERTINTOuser_registrationVALUES(Alice,2020-01-15),(Bob,2020-03-22),(Carol,2021-06-10),(Dave,2019-11-30);-- 混合查询从图中找出 Alice 的朋友再 JOIN 关系表获取其注册时间SELECTf.friend_name,u.registered_atFROMcypher(social,$$MATCH(p:Person {name:Alice})-[:FRIEND_OF]-(friend)RETURNfriend.nameASfriend_name $$)ASf(friend_name agtype)JOINuser_registration uONu.namef.friend_name::text;-- 6.2 在 SQL 中直接过滤图查询结果-- 找出所有年龄大于 30 的人并统计其朋友数量SELECT*FROMcypher(social,$$MATCH(p:Person)-[:FRIEND_OF]-()WHEREp.age30RETURNp.nameASname,count(*)ASfriend_count $$)AS(name agtype,friend_count agtype);Arrow Flight SQL adapter for PG官网Apache Arrow官方开源GitHub116 Star10 ForkPG扩展给PG原生增加一套Arrow Flight SQL(gRPC)服务端点不是代理程序是数据库内运行的插件。在 PG 服务端直接把查询结果组装成 Arrow RecordBatch列存通过 gRPC (Flight) 流式返回给客户端客户端直接拿到列存内存结构省去行→列转换开销适合大数据导出、ETL、分析读取。方案实现位置说明arrow‑flight‑sql‑postgresqlPG内置bgworker扩展直接SPI执行SQL服务端生成Arrow性能最优需要PG≥15独立Flight‑SQL代理服务外部程序数据库外部通过libpq/jdbc访问PG多一层转换无需改PG性能弱于内置扩展JDBCArrow JDBC适配器客户端PG返回行客户端转Arrow大量数据CPU开销高pg_copy导出parquetPG服务端导出文件需要落盘无法流式直接给应用内存

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑