news 2026/9/5 15:48:13

Windows 下从零部署 pgvector:完整编译安装与验证向量搜索指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows 下从零部署 pgvector:完整编译安装与验证向量搜索指南

Windows 下从零部署 pgvector:完整编译安装与验证向量搜索指南

【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector

引言

pgvector 是为 PostgreSQL 提供向量相似性搜索的开源扩展,支持精确与近似最近邻查询、多种向量类型和 HNSW/IVFFlat 索引。本文带你走完 Windows 系统上 pgvector 部署全流程:获取源码、配置环境、nmake 编译、安装扩展,最后用一条 SQL 确认部署成功。

前置条件

  • Windows 10/11 x64 系统
  • PostgreSQL 13+(本文示例用 18,已正确安装并加入 PATH)
  • Visual Studio 2019+ 及其 C++ 生成工具(命令行编译依赖 MSVC)
  • Windows SDK 10.0.19041+
  • Git 客户端

部署主流程:从源码获取到安装

编译脚本 Makefile.win 要求通过PGROOT定位 PostgreSQL 安装目录,因此第一步先把环境变量配好。整个流程建议在Visual Studio x64 Native Tools Command Prompt中完成,并以管理员身份运行(安装阶段要写入 PostgreSQL 目录)。

  1. 配置环境变量:把PGROOT指向你的 PostgreSQL 安装根目录,并把bin加入 PATH,这样 nmake 能找到postgres.lib,后续 psql 也能直接使用。
set PGROOT=C:\Program Files\PostgreSQL\18 set PATH=%PGROOT%\bin;%PATH%
  1. 获取源码:克隆仓库并切到稳定版本 v0.8.6,进入项目目录。
cd %TEMP% git clone --branch v0.8.6 https://gitcode.com/GitHub_Trending/pg/pgvector.git cd pgvector
  1. 编译:执行编译命令,nmake 会按 Makefile.win 的定义依次编译src/下的全部 C 源码并生成vector.dll。其中CFLAGS已自动包含 PostgreSQL 头文件路径,/O2 /fp:fast开启优化与自动向量化,无需手动干预。
nmake /F Makefile.win
  1. 安装:编译成功后执行安装,该命令会把vector.dll复制到 PostgreSQL 的lib目录、扩展 SQL 脚本和.control文件复制到share\extension目录。
nmake /F Makefile.win install

✅ 如果两个 nmake 命令都没有报错,部署已完成。

安装验证:验证 pgvector 扩展是否生效

重启 PostgreSQL 服务后,用 psql 连接数据库,创建一个表来验证扩展和向量功能是否正常工作。

psql -U postgres

在 psql 中依次执行:创建扩展、建一张 3 维向量表并查询最近邻。

CREATE EXTENSION vector; CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3)); INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'); SELECT vector_version();

预期输出为当前扩展版本:

vector_version ---------------- 0.8.6 (1 row)

✅ 能查到版本号和插入的向量,说明 pgvector 部署成功。想跑完整回归测试套件,可再执行:

nmake /F Makefile.win installcheck

它会执行 test/sql/ 下全部 18 个测试脚本,覆盖向量类型、HNSW/IVFFlat 索引等场景。

能力速览:数据类型、距离算子与索引

向量类型

类型精度索引维度上限说明
vector单精度(4 字节/维)2,000最常用,存储4*维度+8字节
halfvec半精度(2 字节/维)4,000内存占用减半
bit二进制64,000配合量化做大规模检索
sparsevec稀疏向量1,000 个非零元素格式{下标:值}/维度

距离算子

算子含义
<->L2 距离(欧几里得)
<#>内积(返回负值)
<=>余弦距离
<+>L1 距离(曼哈顿)
<~>汉明距离(仅限bit
<%>杰卡德距离(仅限bit

索引类型与关键参数

索引特点关键参数
HNSW多层图结构,查询性能最优,构建较慢m(默认 16)、ef_construction(默认 64)、查询时hnsw.ef_search(默认 40)
IVFFlat倒排索引,构建快、内存省,召回率稍低lists(建议rows/1000)、查询时ivfflat.probes(默认 1)

建 HNSW 索引的最小示例:

CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);

排错速查

现象:nmake 报PGROOT is not set原因:Makefile.win 开头会检测PGROOT环境变量,未设置或被 nmake 子进程丢失都会触发该错误。 解法:确认在同一个命令行会话里先执行set PGROOT=...再编译,路径用双引号包裹且不带尾随空格。

现象:编译时找不到crtdefs.h等标准头文件原因:没有使用 Visual Studio 的 Native Tools 环境,或 Windows SDK 未装全。 解法:改用 "x64 Native Tools Command Prompt for VS" 重开终端;若仍报错,在 Visual Studio Installer 中重装 C++ 生成工具和对应 Windows SDK 版本。

现象:装了索引但查询没走索引,速度没提升原因:近似索引只在这种写法下生效——ORDER BY紧跟距离算子结果(升序)且带LIMIT,例如ORDER BY embedding <-> '[3,1,2]' LIMIT 5;包一层表达式或DESC都不会走索引。 解法:改写为直接对算子结果排序的语句;小表下顺序扫描更快属于正常现象。

调优建议

  • 索引构建提速:建 HNSW 索引前执行SET maintenance_work_mem = '8GB'(按需调整)。图结构能放进内存时构建速度显著提升;当内存不足时构建会发出hnsw graph no longer fits into maintenance_work_mem通知。
  • 并行加速构建:执行SET max_parallel_maintenance_workers = 7;增加并行工作进程,大表建索引可从数十分钟缩短到数分钟;同时确认数据先导入、索引后建,避免重复插入图结构。
  • 召回率与速度平衡:召回不足时调高查询参数——HNSW 用SET hnsw.ef_search = 100;,IVFFlat 用SET ivfflat.probes = 10;(起始值可取sqrt(lists))。每调高一点召回率上升、耗时增加,可用EXPLAIN (ANALYZE, BUFFERS)观察实际收益。

总结

到这里,你已经在 Windows 上完成了 pgvector 从源码编译到验证通过的全部流程,接下来建表、插入向量、建索引即可开始向量检索。更多类型用法、过滤查询和量化方案的详细说明,可查阅仓库根目录的 README.md。

【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 15:46:12

.NET 8构建企业级在线考试系统:跨平台、多数据库与国产化实战

简介&#xff1a;星期八在线考试系统是一套面向高校、职业院校及企事业单位的教学管理平台&#xff0c;解决大规模、高并发、强安全要求的在线考试数字化难题。系统基于.NET8构建&#xff0c;具备企业级稳定性与信创适配能力&#xff0c;支持国产数据库&#xff08;人大金仓、达…

作者头像 李华
网站建设 2026/9/5 15:44:16

Pake GitHub Actions 构建指南:免本地环境在线打包网页桌面应用

Pake GitHub Actions 构建指南&#xff1a;免本地环境在线打包网页桌面应用 【免费下载链接】Pake &#x1f931;&#x1f3fb; Turn any webpage into a desktop app with one command. 项目地址: https://gitcode.com/GitHub_Trending/pa/Pake 本文基于 Pake 仓库的官…

作者头像 李华
网站建设 2026/9/5 15:43:59

短身舵机评测与拆解全流程:从参数到结构判断真实性能

把一台 FUTABA CT500 这类短身舵机拿在手里&#xff0c;第一感觉往往很直接&#xff1a;它比常见标准舵机短了一截&#xff0c;重量也更集中&#xff0c;像是专门为了塞进更紧凑的车架而存在。但一个更值得琢磨的问题是——把舵机做短&#xff0c;到底改变了什么&#xff0c;又…

作者头像 李华
网站建设 2026/9/5 15:42:21

物流排班优化:从数学建模到算法求解的完整实战指南

简介&#xff1a;本资源面向2026年辽宁省数学建模竞赛参赛团队&#xff0c;聚焦B题“物流分拣中心排班问题”&#xff0c;提供从逻辑解析、模型构建到论文撰写的全链路保奖级解决方案。资源共60个文件&#xff0c;涵盖12个Python源码&#xff08;含pipeline.py、optimization.p…

作者头像 李华
网站建设 2026/9/5 15:38:09

【pdf】根据PDF模版填充数据并生成新的PDF

准备模版使用 福昕高级PDF编辑器 &#xff08;本人用的这个&#xff0c;其他的也行&#xff0c;能作模版就行&#xff09;打开PDF文件点击 表单 选项&#xff0c;点击 文本域在需要填充数据的位置设计文本域设置 名称、提示名称相当于 属性名&#xff0c;提示就是提示&#xff…

作者头像 李华