文章目录pgvector在 Postgres 里直接做向量检索1、 它能干什么2、 两种索引按需选3、 过滤查询和混合搜索4、 数据怎么存怎么扩5、 安装和上手6、 适合谁用pgvector在 Postgres 里直接做向量检索pgvector 在 GitHub 上已经拿到 21,579 Star。它是个 Postgres 扩展做的事情很明确把向量数据和高维相似度检索直接塞进 Postgres 里。不用额外起服务不用导数据建表、插向量、查近邻全部用 SQL 搞定。1、 它能干什么向量检索是 RAG 和推荐系统的核心环节。传统做法是把向量往专门的向量数据库里塞业务数据留在 Postgres两边各管各的查个近邻还得跨服务。pgvector 把这层拆掉了。向量列和普通列一样建在表上近邻查询写成 SQL还能 JOIN、WHERE、GROUP BY 一起用。它支持的向量类型覆盖常见场景单精度浮点向量vector最高 2,000 维半精度浮点向量halfvec最高 4,000 维省一半存储二进制向量bit最高 64,000 维适合量化加速稀疏向量sparsevec最高 1,000 个非零元素距离函数也有六种L2 距离、内积、余弦距离、L1 距离、Hamming 距离、Jaccard 距离。OpenAI 的文本嵌入直接就能用内积查。2、 两种索引按需选精确搜索逐行算距离结果准确但数据量大时慢。pgvector 提供两种近似索引在速度和召回率之间取舍。HNSW是多层图索引查询性能高构建慢内存占用大。不需要先有数据就能建没有训练步骤。CREATEINDEXONitemsUSINGhnsw(embedding vector_l2_ops);IVFFlat把向量分到若干列表里只搜离查询向量最近的那几列表。构建更快内存更少查询性能不如 HNSW。CREATEINDEXONitemsUSINGivfflat(embedding vector_l2_ops)WITH(lists100);建索引时调maintenance_work_mem能显著缩短构建时间。大批量写入数据时先导入再建索引顺序不要反。3、 过滤查询和混合搜索带条件的近邻搜索很常见。比如只搜某个分类下的向量或者距离小于某个阈值的结果。pgvector 的做法是在过滤列上建普通索引近邻查询和条件查询一起走。如果过滤条件命中行数少精确搜索加 Btree 索引就够快。条件命中行数多可以用近似索引配合迭代扫描自动扫更多索引直到结果够数。SEThnsw.iterative_scanstrict_order;它还能和 Postgres 的全文检索混搭做混合搜索。语义相似度和关键词匹配各自跑再用 RRF 或交叉编码器融合结果。这一套组合不需要引入新的存储组件。4、 数据怎么存怎么扩向量量化的思路是用低精度或二进制向量建索引做粗筛原始向量留在表里做精排。pgvector 支持二进制量化表达式索引查的时候先走 Hamming 距离召回 Top 20再用原始向量的余弦距离精排取 Top 5。SELECT*FROM(SELECT*FROMitemsORDERBYbinary_quantize(embedding)::bit(3)~binary_quantize([1,-2,3])LIMIT20)ORDERBYembedding[1,-2,3]LIMIT5;半精度向量也是类似的思路存储和索引都用halfvec查询时类型转换一下省空间又省内存。子向量索引支持把高维向量拆成低维段分别建索引适合跨模态检索里不同维度的特征分离场景。5、 安装和上手编译安装支持 Postgres 13Linux 和 Mac 上就是三板斧gitclone--branchv0.8.2 pgvector.gitcdpgvectormakemakeinstallWindows 用nmake编译。Docker、Homebrew、PGXN、APT、Yum、conda-forge 这些渠道也都有包Postgres.app 还预装了。数据库里启用扩展CREATEEXTENSION vector;建表插数据CREATETABLEitems(id bigserialPRIMARYKEY,embedding vector(3));INSERTINTOitems(embedding)VALUES([1,2,3]),([4,5,6]);查近邻SELECT*FROMitemsORDERBYembedding-[3,1,2]LIMIT5;-是 L2 距离#是内积是余弦距离。语法和 Postgres 原生查询没有区别。6、 适合谁用已经用 Postgres 做业务数据库、不想为向量单独起一套存储的团队pgvector 是最省事的方案。数据一致性、备份恢复、权限管理全部复用 Postgres 的机制不需要额外维护一条链路。做 RAG 系统的开发者也能直接复用向量库和业务库在一个实例里JOIN 和事务都天然支持。向量量化和子向量索引给的扩展路径足够撑到十亿级别向量的场景。Postgres 的机制不需要额外维护一条链路。做 RAG 系统的开发者也能直接复用向量库和业务库在一个实例里JOIN 和事务都天然支持。向量量化和子向量索引给的扩展路径足够撑到十亿级别向量的场景。
pgvector:在 Postgres 里直接做向量检索
发布时间:2026/6/8 14:27:54
文章目录pgvector在 Postgres 里直接做向量检索1、 它能干什么2、 两种索引按需选3、 过滤查询和混合搜索4、 数据怎么存怎么扩5、 安装和上手6、 适合谁用pgvector在 Postgres 里直接做向量检索pgvector 在 GitHub 上已经拿到 21,579 Star。它是个 Postgres 扩展做的事情很明确把向量数据和高维相似度检索直接塞进 Postgres 里。不用额外起服务不用导数据建表、插向量、查近邻全部用 SQL 搞定。1、 它能干什么向量检索是 RAG 和推荐系统的核心环节。传统做法是把向量往专门的向量数据库里塞业务数据留在 Postgres两边各管各的查个近邻还得跨服务。pgvector 把这层拆掉了。向量列和普通列一样建在表上近邻查询写成 SQL还能 JOIN、WHERE、GROUP BY 一起用。它支持的向量类型覆盖常见场景单精度浮点向量vector最高 2,000 维半精度浮点向量halfvec最高 4,000 维省一半存储二进制向量bit最高 64,000 维适合量化加速稀疏向量sparsevec最高 1,000 个非零元素距离函数也有六种L2 距离、内积、余弦距离、L1 距离、Hamming 距离、Jaccard 距离。OpenAI 的文本嵌入直接就能用内积查。2、 两种索引按需选精确搜索逐行算距离结果准确但数据量大时慢。pgvector 提供两种近似索引在速度和召回率之间取舍。HNSW是多层图索引查询性能高构建慢内存占用大。不需要先有数据就能建没有训练步骤。CREATEINDEXONitemsUSINGhnsw(embedding vector_l2_ops);IVFFlat把向量分到若干列表里只搜离查询向量最近的那几列表。构建更快内存更少查询性能不如 HNSW。CREATEINDEXONitemsUSINGivfflat(embedding vector_l2_ops)WITH(lists100);建索引时调maintenance_work_mem能显著缩短构建时间。大批量写入数据时先导入再建索引顺序不要反。3、 过滤查询和混合搜索带条件的近邻搜索很常见。比如只搜某个分类下的向量或者距离小于某个阈值的结果。pgvector 的做法是在过滤列上建普通索引近邻查询和条件查询一起走。如果过滤条件命中行数少精确搜索加 Btree 索引就够快。条件命中行数多可以用近似索引配合迭代扫描自动扫更多索引直到结果够数。SEThnsw.iterative_scanstrict_order;它还能和 Postgres 的全文检索混搭做混合搜索。语义相似度和关键词匹配各自跑再用 RRF 或交叉编码器融合结果。这一套组合不需要引入新的存储组件。4、 数据怎么存怎么扩向量量化的思路是用低精度或二进制向量建索引做粗筛原始向量留在表里做精排。pgvector 支持二进制量化表达式索引查的时候先走 Hamming 距离召回 Top 20再用原始向量的余弦距离精排取 Top 5。SELECT*FROM(SELECT*FROMitemsORDERBYbinary_quantize(embedding)::bit(3)~binary_quantize([1,-2,3])LIMIT20)ORDERBYembedding[1,-2,3]LIMIT5;半精度向量也是类似的思路存储和索引都用halfvec查询时类型转换一下省空间又省内存。子向量索引支持把高维向量拆成低维段分别建索引适合跨模态检索里不同维度的特征分离场景。5、 安装和上手编译安装支持 Postgres 13Linux 和 Mac 上就是三板斧gitclone--branchv0.8.2 pgvector.gitcdpgvectormakemakeinstallWindows 用nmake编译。Docker、Homebrew、PGXN、APT、Yum、conda-forge 这些渠道也都有包Postgres.app 还预装了。数据库里启用扩展CREATEEXTENSION vector;建表插数据CREATETABLEitems(id bigserialPRIMARYKEY,embedding vector(3));INSERTINTOitems(embedding)VALUES([1,2,3]),([4,5,6]);查近邻SELECT*FROMitemsORDERBYembedding-[3,1,2]LIMIT5;-是 L2 距离#是内积是余弦距离。语法和 Postgres 原生查询没有区别。6、 适合谁用已经用 Postgres 做业务数据库、不想为向量单独起一套存储的团队pgvector 是最省事的方案。数据一致性、备份恢复、权限管理全部复用 Postgres 的机制不需要额外维护一条链路。做 RAG 系统的开发者也能直接复用向量库和业务库在一个实例里JOIN 和事务都天然支持。向量量化和子向量索引给的扩展路径足够撑到十亿级别向量的场景。Postgres 的机制不需要额外维护一条链路。做 RAG 系统的开发者也能直接复用向量库和业务库在一个实例里JOIN 和事务都天然支持。向量量化和子向量索引给的扩展路径足够撑到十亿级别向量的场景。