Postgres + pgvector(向量检索)
定义
pgvector 是 PostgreSQL 的扩展,提供原生 vector 列类型、相似度运算符(余弦、L2、内积)和近似最近邻索引(HNSW、IVFFlat)。它让你把向量嵌入和关系数据存在同一个库里、用普通 SQL 做语义检索——对大多数 RAG 场景来说,Postgres 就是一个完全够用的向量数据库。
为什么对 AI 求职重要
“Postgres + pgvector”会原封不动地出现在 AI 职位 JD 里,因为它是务实的默认选择:团队本来就在用 Postgres,向量放同一个库意味着 JOIN、事务和权限控制全部免费获得。知道 pgvector 什么时候够用、什么时候该换专用向量库——这正是资深工程师被雇来做的判断。
核心概念
- 向量存储——
vector(1536)列与距离运算符(<=>余弦距离)。 - ANN 索引——HNSW 与 IVFFlat:构建时间、召回率、内存占用的权衡。
- 混合检索——向量相似度 + Postgres 全文检索(BM25 风格)+ 元数据过滤。
- 带过滤的向量检索——WHERE 条件 + 向量排序的组合及其索引影响。
- 扩展性——表分区、连接池(pgbouncer)、只读副本。
- 替代方案——Pinecone、Qdrant、Weaviate;什么规模/功能需求值得上专用向量库。
学习路径
- 本地(Docker)装 pgvector,建带 vector 列的表,用嵌入 API 写入向量。
- 用余弦距离查 top-k 近邻;加 HNSW 索引并实测提速。
- 实现混合检索:在一条 SQL 里融合向量得分与
tsvector全文排名。 - 接入 FastAPI 端点,完成一个最小 RAG 检索服务。
- 用 100 万+ 向量做压测,理解索引构建时间、召回率与内存表现。