当前位置: 首页 > news >正文

pgvector介绍(PostgreSQL扩展,允许PG原生存储向量,并进行向量相似度搜索)向量距离计算、欧氏距离、内积、ANN索引、IVFFlat、HNSW、Query DSL

文章目录

  • pgvector 介绍:让 PostgreSQL 拥有向量检索能力
  • 什么是 pgvector
  • 为什么 pgvector 会流行
  • pgvector 的核心能力
    • 向量存储
  • 向量距离计算
    • L2 Distance(欧氏距离)(`<->`)
    • Cosine Distance(`<=>`)
    • Inner Product(内积)(`<#>`)
  • pgvector 的索引机制
  • IVFFlat
  • HNSW
  • 一个完整的 RAG 流程
    • 1. 文档切片
    • 2. 生成 embedding
    • 3. 写入 PostgreSQL
    • 4. 用户查询
    • 5. 相似度搜索
    • 6. 拼接 Prompt
    • 7. 发送给 LLM
  • pgvector 与专业向量数据库的区别
    • pgvector 的优势
      • 1. PostgreSQL 生态完整
    • 2. 数据一致性更简单
    • 3. 开发体验非常好
  • pgvector 的局限性
    • 1. 超大规模场景不占优
    • 2. 内存压力明显
    • 3. Vacuum 与索引维护问题
  • pgvector 的典型适用场景
    • 适合
      • AI MVP
    • 中小规模 RAG
    • Agent Memory
    • AI SaaS
  • 不适合的场景
    • 超大规模向量搜索
    • 极致低延迟召回
    • GPU Vector Search
  • pgvector 常见技术栈
    • Python
    • LangChain
    • LlamaIndex
    • Django
  • pgvector 的工程实践建议
    • embedding 不要频繁更新
    • 尽量避免超高维度
    • metadata 与 embedding 放一起
    • 合理选择索引
  • 一个容易被忽视的问题
  • 总结

pgvector 介绍:让 PostgreSQL 拥有向量检索能力

在 AI 应用快速发展的今天,向量数据库(Vector Database)几乎已经成为 RAG、语义搜索、推荐系统、AI Agent 的基础设施。

但很多团队在真正落地时,会遇到一个现实问题:

我已经有 PostgreSQL 了,真的需要再引入一个新的向量数据库吗?

这也是 pgvector 出现并迅速流行的原因。

pgvector 是 PostgreSQL 的一个扩展(Extension),它允许 PostgreSQL 原生存储向量,并进行向量相似度搜索。

它的核心价值并不是“性能超越专业向量数据库”,而是:

  • 降低架构复杂度
  • 避免数据同步
  • 利用 PostgreSQL 生态
  • 让 AI 能力自然融入现有业务系统

本文将从架构、原理、索引、性能、适用场景等多个角度,全面介绍 pgvector。


什么是 pgvector

pgvector 是一个 PostgreSQL 扩展,用于:

  • 存储 embedding(向量)
  • 进行向量距离计算
  • 支持 ANN(Approximate Nearest Neighbor)近似最近邻搜索
  • 支持向量索引

其官方项目:

pgvector GitHub

安装后,PostgreSQL 会新增一种数据类型:

vector

例如:

CREATETABLEdocuments(id BIGSERIALPRIMARYKEY,contentTEXT,embedding VECTOR(1536));

这里的1536对应 embedding 维度。

如果你使用:

  • OpenAI text-embedding-3-small
  • OpenAI ada-002
  • bge-large
  • e5-large

都需要根据实际维度定义字段。


为什么 pgvector 会流行

在 pgvector 出现之前,很多 AI 系统架构是这样的:

应用层 │ ├── PostgreSQL(业务数据) │ └── Pinecone / Milvus / Weaviate(向量数据)

这会带来很多问题:

  • 数据同步复杂
  • 一致性难维护
  • 运维成本增加
  • 需要维护额外集群
  • 查询逻辑分裂

而 pgvector 的思路是:

PostgreSQL ├── 业务数据 └── 向量数据

这样:

  • metadata 和 embedding 可以事务一致
  • 不需要额外同步 pipeline
  • SQL 可以统一查询
  • 运维成本明显下降

因此:

pgvector 非常适合:

  • AI MVP
  • 中小规模 RAG
  • 内部知识库
  • Agent Memory
  • AI SaaS 产品

pgvector 的核心能力

向量存储

最基础能力:

VECTOR(n)

例如:

VECTOR(768)VECTOR(1536)VECTOR(3072)

底层本质是:

float4[]

即:

[0.123, -0.482, 0.998, ...]

向量距离计算

pgvector 支持多种距离函数。

L2 Distance(欧氏距离)(<->

SELECT*FROMitemsORDERBYembedding<->'[1,2,3]'LIMIT5;

运算符:

<->

表示:

Euclidean Distance

Cosine Distance(<=>

SELECT*FROMitemsORDERBYembedding<=>'[1,2,3]'LIMIT5;

运算符:

<=>

在 embedding 搜索中最常见。

因为 embedding 更关注方向相似度,而不是绝对长度。


Inner Product(内积)(<#>

SELECT*FROMitemsORDERBYembedding<#> '[1,2,3]'LIMIT5;

运算符:

<#>

适合:

  • 推荐系统
  • normalized embedding
  • ranking 模型

pgvector 的索引机制

如果没有索引:

ORDERBYembedding<=>query_vector

会变成:

全表扫描

数据量稍微变大就无法接受。

因此 pgvector 提供 ANN 索引。


IVFFlat

IVFFlat 是 pgvector 最早支持的 ANN 索引。

创建方式:

CREATEINDEXONitemsUSINGivfflat(embedding vector_cosine_ops)WITH(lists=100);

其核心思想:

先聚类 再只搜索部分聚类

过程类似:

所有向量 ↓ KMeans 聚类 ↓ 查询时只扫描最接近的几个 cluster

优点:

  • 查询速度快
  • 内存占用低

缺点:

  • 精度下降
  • 参数敏感
  • 数据更新频繁时效果会变差

HNSW

后来 pgvector 加入了 HNSW。

这是目前更主流的方案。

创建方式:

CREATEINDEXONitemsUSINGhnsw(embedding vector_cosine_ops);

HNSW 全称:

Hierarchical Navigable Small World

它本质是一种:

多层图结构

查询时通过图导航快速逼近最近邻。

其特点:

特性HNSW
查询速度非常快
Recall很高
内存占用较高
建索引时间较长
动态更新较好

如今:

  • Milvus
  • Weaviate
  • Qdrant
  • Elasticsearch Vector
  • pgvector

基本都支持 HNSW。


一个完整的 RAG 流程

下面是 pgvector 在 RAG 中的典型流程。

1. 文档切片

PDF → Chunk → embedding

例如:

每 500 token 切一段

2. 生成 embedding

例如:

embedding=model.embed(text)

得到:

[0.0182,-0.282,...]

3. 写入 PostgreSQL

INSERTINTOdocs(content,embedding)VALUES(...)

4. 用户查询

用户输入:

What is vector database?

生成 query embedding。


5. 相似度搜索

SELECTcontentFROMdocsORDERBYembedding<=>query_embeddingLIMIT5;

6. 拼接 Prompt

Context: ... Question: ...

7. 发送给 LLM

最终生成回答。


pgvector 与专业向量数据库的区别

这是很多人最关心的问题。

pgvector 的优势

1. PostgreSQL 生态完整

你可以直接使用:

  • JOIN
  • Transaction
  • Backup
  • Replication
  • Partition
  • JSONB
  • Row Level Security

这是巨大优势。

很多专业向量数据库:

向量能力强。

但事务能力、SQL 能力、生态成熟度远不如 PostgreSQL。


2. 数据一致性更简单

例如:

文章删除 embedding 自动一起删除

不需要:

双写 消息队列同步 CDC

3. 开发体验非常好

开发者可以直接:

SELECT...ORDERBYembedding<=>...

不需要学习新的 Query DSL(Query Domain-Specific Language,查询特定领域语言)。


pgvector 的局限性

但 pgvector 也不是万能的。


1. 超大规模场景不占优

例如:

  • 数亿 embedding
  • TB 级向量
  • 高 QPS ANN

专业向量数据库通常更强。

因为它们:

  • 专门优化 ANN
  • 自定义存储引擎
  • 更激进的内存布局
  • GPU 支持
  • 分布式 ANN

而 PostgreSQL 本质仍是:

通用 OLTP(联机事务处理) 数据库

2. 内存压力明显

HNSW 很吃内存。

embedding 本身也很大:

1536 dim × 4 bytes ≈ 6KB / vector

(在计算机中,向量的每个维度(即每个数值)通常以 float32(单精度浮点数)格式存储,而 float32 正好占用 4 个字节)

100 万条:

≈ 6GB

还不包括:

  • 索引
  • metadata
  • WAL
  • MVCC(Multi-Version Concurrency Control,多版本并发控制,是一种数据库管理系统中常用的并发控制技术,主要用于提高数据库的并发性能)

3. Vacuum 与索引维护问题

PostgreSQL 的 MVCC 机制意味着:

  • UPDATE
  • DELETE

会产生 dead tuples。

向量索引也需要维护。

大量写入时:

  • vacuum
  • reindex
  • autovacuum tuning

都需要认真调优。


pgvector 的典型适用场景

适合

AI MVP

这是 pgvector 最强场景。

因为:

简单 > 极致性能

中小规模 RAG

例如:

  • 公司知识库
  • FAQ
  • AI 搜索
  • 文档助手

Agent Memory

例如:

长期记忆 对话检索 历史语义搜索

AI SaaS

尤其适合:

每租户数据量不大

但:

租户很多

的系统。

因为 PostgreSQL 的多租户能力成熟。


不适合的场景

超大规模向量搜索

例如:

  • 10 亿 embedding
  • 高频 ANN
  • 实时推荐系统

极致低延迟召回

例如:

<10ms ANN at huge scale

GPU Vector Search

pgvector 目前不属于 GPU-first 架构。


pgvector 常见技术栈

Python

常见组合:

  • psycopg
  • SQLAlchemy
  • asyncpg

例如:

frompgvector.psycopgimportregister_vector

LangChain

LangChain 原生支持 pgvector。

例如:

PGVector

LlamaIndex

也支持:

Postgres Vector Store

Django

可直接:

VectorField

pgvector 的工程实践建议


embedding 不要频繁更新

因为:

UPDATE 会导致索引维护

通常:

delete + insert

更简单。


尽量避免超高维度

高维 embedding:

  • 更占内存
  • ANN 更慢

很多时候:

768 dim

已经足够。


metadata 与 embedding 放一起

这是 pgvector 最大价值之一。

例如:

tenant_id document_id author tags created_at embedding

可以直接:

WHEREtenant_id=?

再进行向量搜索。


合理选择索引

一般:

场景推荐
小数据量不建索引
中规模IVFFlat
大规模HNSW

一个容易被忽视的问题

很多人以为:

向量数据库 = AI

其实并不是。

embedding 检索只是:

信息召回

它解决的是:

找到相关内容

而不是:

理解内容

因此:

RAG 的效果更多取决于:

  • chunking
  • embedding model
  • rerank
  • prompt
  • 数据质量

而不仅仅是:

你用了哪个向量数据库

总结

pgvector 的成功,本质上不是因为它“最强”。

而是因为:

它足够强,同时足够简单

它让 AI 系统可以:

  • 复用 PostgreSQL
  • 降低系统复杂度
  • 快速构建 RAG
  • 保持事务一致性
  • 使用成熟 SQL 生态

对于:

  • MVP
  • 中小规模 AI 系统
  • SaaS 产品
  • 内部知识库

pgvector 往往是一个极其务实的选择。

但如果进入:

  • 超大规模 ANN
  • 极限低延迟
  • 分布式 GPU 检索

那么专业向量数据库仍然更具优势。

因此:

真正重要的问题不是:

pgvector 好不好

而是:

你的系统到底需要什么规模与复杂度

这也是工程实践里最重要的一件事:

不要为了“未来可能的规模”,过早引入复杂系统。

http://www.jsqmd.com/news/906270/

相关文章:

  • 从零设计可调光LED夜灯:NE555 PWM电路全流程实战指南
  • Layuimini无限级菜单系统:构建企业级后台导航的终极指南
  • 智能客服平台进入图书版本咨询,细分类目服务开始考验知识准确性
  • 2026年 化粪池厂家推荐排行榜:混凝土/三格/水泥预制化粪池,旱厕改造及农村家用化粪池优质品牌解析 - 品牌企业推荐师(官方)
  • 冰雪传奇点卡版下载官方正版入口:高效升级路线规划 快速提升等级
  • AI矩阵运营正在重构企业线上拓客逻辑:从“人工运营”到“智能增长”
  • 如何高效使用极域电子教室防控制软件:JiYuTrainer完整使用指南
  • 基于Arduino的动漫角色机械面制作:从传感器到伺服电机的交互实现
  • OV2640摄像头避坑指南:从SCCB通信、窗口设置到图像特效的STM32配置全解析
  • 一次踩坑实录:我是怎么找到最适合我的QQ机器人的
  • 2026 年 5 月会计备考突围:真题笔记实测与避坑指南 - 讲清楚了
  • 新手如何合并两张图片?详细入门攻略手把手教你完成拼图 - 小有的家
  • 为开源AI工具OpenClaw配置Taotoken作为后端模型提供商
  • Arduino Timer0中断对微秒级时序的影响与解决方案
  • 全能去水印软件分享,简单操作就能抹除视频各类水印 - 体验家
  • 两张图片拼接成一张图教程,多种操作方法及无缝拼接小技巧 - 小有的家
  • Chaldea:FGO御主的终极智能游戏管家与战斗模拟器完整指南
  • 拆开你家坏掉的LED灯,看看那个‘故意’发热的电阻和电容是怎么联手‘谋杀’灯泡寿命的
  • 我准备了40多篇教程,想带你真正学会用AI+obsidian
  • 模型瘦身与响应提速,深度解析DeepSeek-R1在iOS/Android端的内存泄漏根因及修复方案
  • CentOS 7升级内核踩坑实录:手把手教你解决‘pstore: unknown compression: deflate’报错,顺利进系统
  • 3分钟解锁网易云音乐:NCM转MP3全攻略
  • 保姆级教程:手把手教你进BIOS开启Intel VT-x,解决VMware报错(附7大品牌主板/笔记本实操)
  • 企业级AI选型决策模型(Claude专项版):融合LLM评估矩阵、RAG兼容度热力图与GDPR就绪度评分卡
  • 哪些AI论文写作助手不仅支持文本生成,还能可靠地输出图片、公式、代码和结构化实验数据
  • Pythoncopy深拷贝与浅拷贝
  • 2026 年搭建 AI 智能体必看:Hermes Agent 的 6 个核心优势与实战教程
  • 【限时解密】Sora 2未公开API调试接口+本地化推理加速套件(仅开放前200名技术订阅者获取)
  • AI矩阵系统为什么成为企业线上获客的新趋势?
  • 告别盲目下断点:Keil5调试效率翻倍的5个高级技巧与避坑指南