pgvector Windows部署:源码编译装好PostgreSQL向量扩展,20分钟跑通HNSW相似查询
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
pgvector 是 PostgreSQL 的向量搜索扩展,装好后 embedding 直接存在普通表里,不用另起一套向量库。本文在 Windows 10/11 上完成 pgvector 安装与编译,装好扩展、建出 HNSW 索引,跑通第一条相似性查询。
先看装好之后的样子
装好之后的样子很具体:一张普通表存放 embedding,配一个 HNSW 索引,相似检索就是一条 SQL。
CREATE TABLE docs ( id int, title text, embedding vector(384) ); CREATE INDEX ON docs USING hnsw (embedding); SELECT title FROM docs ORDER BY embedding <-> '[0.01, 0.02, 0.03, ...]'::vector LIMIT 10;最后这条语句按距离排序取前 10 行,返回的就是最相似的结果,全程无需维护独立的向量数据库,查询直接写在业务 SQL 里。
开工前四项核对
四样东西占齐再动手,缺任何一项,后面的编译环节都会卡住:
| 组件 | 版本要求 | 它在这套流程里的作用 |
|---|---|---|
| PostgreSQL | 14+(推荐 16/18) | 编译阶段要依赖它的头文件和库文件 |
| Visual Studio | 2019+ | 提供编译器,安装时务必勾选"C++ 桌面开发"工作负载 |
| Windows SDK | 10.0.19041+ | 随 VS 工具链一起安装,提供系统头文件,漏装会编译失败 |
| Git | 任意较新版本 | 拉取 pgvector 源码 |
从克隆源码到编译完成
拉取 v0.8.1 分支源码
源码放在临时目录即可,装完之后不用再管它:
cd %TEMP% git clone --branch v0.8.1 https://gitcode.com/GitHub_Trending/pg/pgvector.git cd pgvector设置 PGROOT 与 PATH 环境变量
把 PGROOT 指向你的 PostgreSQL 安装目录。Makefile.win 靠这个变量定位头文件、库文件和安装目标,没设置的话 nmake 会直接报错。同一会话里顺手把 bin 目录也加进 PATH:
set PGROOT=C:\Program Files\PostgreSQL\16 set PATH=%PGROOT%\bin;%PATH%在 x64 Native Tools 命令行执行 nmake 编译
终端换成 VS 的"x64 Native Tools Command Prompt",用别的 shell 会缺 SDK 依赖。然后跑两条命令,一条编译、一条安装:
nmake /F Makefile.win nmake /F Makefile.win install第二条命令负责把 vector.dll 和 SQL 文件拷贝进 PGROOT 的对应目录。编译本身不慢,顺利的话端到端大约 20 分钟。
两句话验证,一轮回归
连上数据库,依次执行两句:
CREATE EXTENSION vector; SELECT vector_version();第二条能返回版本号,说明 pgvector 安装已经生效。✅
想跑完整回归的话,命令行再补一行 pgvector installcheck,它会把 test/sql 下的全部用例过一遍,类型转换、索引构建、距离函数都有覆盖:
nmake /F Makefile.win installcheck编译报错时按这个顺序查
⚠️ 常见的 pgvector 编译报错基本集中在下面三种情况,从上往下排查:
三类高频报错对照
| 现象 | 原因 | 处理办法 |
|---|---|---|
找不到crtdefs.h | 终端环境不对,或 VS 缺少 SDK 组件 | 换到 VS 的 x64 Native 命令行;仍不行就重装"C++ 生成工具" |
PGROOT is not set | 环境变量没设置,或终端重开后丢失 | 在当前会话重新执行set PGROOT=... |
C2196case value already used | 编译没有在 VS 原生环境里进行 | 切换到正确的命令行后执行nmake /F Makefile.win clean再重新编译 |
装完能干什么,怎么让它更快
向量类型与维度上限
| 类型 | 维度上限 | 说明 |
|---|---|---|
vector | 约 2000 | |
halfvec | 约 4000 | |
bit | 64000 | |
sparsevec | — | 面向高维稀疏数据 |
距离算子
| 算子 | 距离类型 |
|---|---|
<-> | L2 |
<#> | 内积(取负) |
<=> | 余弦 |
<+> | L1 |
四个算子都能建索引加速查询。
索引选型:HNSW 还是 IVFFlat
| 索引 | 特点 | 怎么选 |
|---|---|---|
| HNSW | 图结构,查询快 | 多数场景的默认选择 |
| IVFFlat | 构建快 | 更看重建索引速度时 |
调优清单
- 数据灌完再建索引
- 调大
maintenance_work_mem - 大表建索引时开启并行 worker
- HNSW 调
ef_search,IVFFlat 调probes:调高换召回,调低换速度 - 召回不达标先查索引选型,小表走顺序扫描往往更稳
想深入看编译规则可以打开 Makefile.win,回归测试用例都在 test/sql/ 目录下。
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考