pgvector
pgvector 是 PostgreSQL 数据库的开源向量扩展插件,用于在关系型数据库中存储、索引和查询高维向量数据。它支持精确搜索与近似最近邻搜索(ANN),提供多种距离度量方式(如欧氏距离、余弦相似度、内积),并兼容 IVFFlat 和 HNSW 等索引算法。pgvector 常用于机器学习嵌入向量的存储与检索,使开发者无需引入独立向量数据库即可在 PostgreSQL 中实现语义搜索和推荐等功能。
核心事实
时间轴 (近 90 天)
pgvector 在索引扫描之后才应用 WHERE 过滤;其 README 指出,若过滤条件匹配 10% 的行,在默认 hnsw.ef_search 为 40 时 top-10 查询平均只返回 4 行。
pgvector 可在事务中通过 SET LOCAL enable_indexscan = off 跳过索引拿精确答案,Qdrant 可通过 "exact": true 实现精确检索。
pgvector 从 0.8.0 起提供迭代索引扫描(iterative index scan),通过 SET hnsw.iterative_scan = relaxed_order 或 strict_order 开启,在候选耗尽时继续扩大扫描直到凑够 LIMIT 行数或达到 hnsw.max_scan_tuples 上限。
pgvector 的默认 hnsw.ef_search 值为 40。
hnswlib 文档称 ef 越高搜索越准越慢,且不能小于 k;该表述基本可迁移到 pgvector 的 hnsw.ef_search 上理解。
pgvector 的 HNSW 索引实现参考了 hnswlib 的算法与默认值,但并非直接嵌入该库,而是用 C 重写并适配 Postgres 存储层。
RAG检索流程为:问题 → 改写 → 嵌入 → top-k → 重排 → 上下文 → LLM。模型不执行搜索,是应用代码进行搜索并将结果放入上下文。Embedding使用专门训练的模型将文本转为定长向量,以余弦相似度衡量语义距离。
IVFFlat 要求建索引时表中已有代表性数据,否则聚类中心无法反映真实分布,且新数据写入后列表分布会逐渐失衡、召回率可能下降,需要定期重建索引。
pgvector 的向量维度(示例中为 1536)必须与所用嵌入模型匹配,更换模型意味着重新嵌入整个语料库,因此建议记录产生每个向量的模型与版本。
在 Java 中使用 JdbcTemplate 向 pgvector 写入向量时,必须显式使用 ::vector 类型转换,否则 PostgreSQL 可能把参数当作普通文本处理。
还有 40 条时间轴事件
全部知识事实 (20)
pgvector扩展为PostgreSQL添加了向量存储和相似度搜索能力,使Supabase可以同时充当传统数据库和向量数据库
80%已验证Pinecone、Chroma、Weaviate是常见的向量数据库产品
80%已验证长期记忆通常借助向量数据库(如Chroma、Pinecone、Weaviate、Milvus等)来实现语义检索
80%已验证典型的RAG流程包括文档切片、向量化嵌入、存入向量数据库、语义检索、上下文拼接和最终生成六个步骤
75%已验证pgvector 是 PostgreSQL 的开源扩展,为关系型数据库原生添加向量数据类型与相似度搜索能力,支持精确最近邻和近似最近邻(HNSW、IVFFlat 索引)两种检索模式
70%已验证Pinecone是全托管的云原生向量数据库
70%已验证PostgreSQL可通过pgvector支持向量检索
65%已验证向量存储常用专用向量数据库如Pinecone、Chroma、Weaviate,支持近似最近邻检索
65%待验证MaxKB通常集成PostgreSQL的pgvector扩展或独立的向量数据库
75%待验证对于向量规模在千万级以下且对延迟不敏感的应用,pgvector现有的索引可能已经足够,没有必要引入新的依赖。
60%待验证主流向量数据库Pinecone、Weaviate、Qdrant、pgvector等底层普遍采用HNSW近似最近邻索引算法
60%待验证hnswlib 文档称 ef 越高搜索越准越慢,且不能小于 k;该表述基本可迁移到 pgvector 的 hnsw.ef_search 上理解。
50%待验证pgvector 在索引扫描之后才应用 WHERE 过滤;其 README 指出,若过滤条件匹配 10% 的行,在默认 hnsw.ef_search 为 40 时 top-10 查询平均只返回 4 行。
50%待验证pgvector 的默认 hnsw.ef_search 值为 40。
50%待验证pgvector 的 HNSW 索引实现参考了 hnswlib 的算法与默认值,但并非直接嵌入该库,而是用 C 重写并适配 Postgres 存储层。
50%待验证pgvector 可在事务中通过 SET LOCAL enable_indexscan = off 跳过索引拿精确答案,Qdrant 可通过 "exact": true 实现精确检索。
50%待验证RAG检索流程为:问题 → 改写 → 嵌入 → top-k → 重排 → 上下文 → LLM。模型不执行搜索,是应用代码进行搜索并将结果放入上下文。Embedding使用专门训练的模型将文本转为定长向量,以余弦相似度衡量语义距离。
50%待验证Java 没有针对 pgvector 的 vector 类型的专用驱动,但该类型可以作为文本字面量发送,并以字符串形式读回。
50%待验证在 Java 中使用 JdbcTemplate 向 pgvector 写入向量时,必须显式使用 ::vector 类型转换,否则 PostgreSQL 可能把参数当作普通文本处理。
50%待验证将向量留在 PostgreSQL 中支持事务一致性:文档更新时其分块和向量可在同一事务中替换,读端不会看到向量过期或缺失的文档。
50%