PostgreSQL 的开源向量检索扩展,为关系数据库增加向量类型与近似检索索引,适合已有 PG 系统改造。
这个扩展解决的是“向量存哪儿”的问题
如果你手头已经有一套 PostgreSQL 在跑,现在要加语义搜索、图片相似度或者推荐召回,第一反应可能是再搭一套专门的向量数据库。pgvector 就是冲着“不用折腾”来的:它给 PG 加了一个 vector 类型,再配上近似最近邻(ANN)索引,让向量检索直接在你现有的表里完成。
适合谁用?已经有 PG、数据量在千万级以内、不想为了向量检索再维护一套独立服务的团队。如果你的向量规模上亿、QPS 极高,或者需要复杂的多路召回编排,专用向量库可能更合适——但多数业务场景其实到不了那个量级。
装起来和用起来都挺朴素
编译安装后执行 CREATE EXTENSION vector;,然后就能建带向量列的表:
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);
支持三种距离度量:L2 欧氏距离、内积、余弦距离。索引有两种可选——HNSW 查询快、召回高,但建索引慢、占内存;IVFFlat 建得快、内存占用小,召回率依赖聚类参数调优。一般优先 HNSW,内存吃紧再考虑 IVFFlat。
查询就是普通 SQL,ORDER BY embedding <-> '[1,2,3]' LIMIT 10 这种写法。这意味着向量检索能和你的业务表 join、能和 WHERE 条件组合过滤、能走事务——这是独立向量库很难给到的顺手程度。
几个实际会碰到的点
- 维度上限:索引对向量维度有限制(HNSW 支持到 2000 维,IVFFlat 到 2000 维),超了就得降维或换方案。
- 过滤与召回:带 WHERE 条件的向量查询,PG 可能先用索引再过滤,导致返回结果不足。新版支持迭代扫描(iterative scan)缓解这个问题,但复杂过滤场景仍需实测。
- 写入开销:HNSW 索引的插入和更新有成本,高频写入的表要评估一下。
- 生态:和 pg_dump、逻辑复制、主流 ORM 都能配合,运维上基本沿用你现有的 PG 那套。
项目在 GitHub 上更新活跃,文档里有性能调优和参数说明,遇到问题翻 issue 基本能找到答案。一句话:它不是要取代专用向量库,而是让“已经有 PG”的人用最低成本把向量检索跑起来。
常见问题
pgvector 是什么?
PostgreSQL 的开源向量检索扩展,为关系数据库增加向量类型与近似检索索引,适合已有 PG 系统改造。
pgvector 的官方网站是什么?
pgvector 的官方网站是 https://github.com/pgvector/pgvector,可直接在浏览器中打开使用。
