3 条 nmake 命令在 Windows 装好 pgvector:PostgreSQL 向量搜索扩展从编译到验证
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
你已有一套在跑的 PostgreSQL,现在想不额外引入向量数据库就直接做语义搜索,pgvector 就是为此设计的:它把向量类型、距离函数和近似索引全部放进 Postgres 内部,一次 SQL 即可完成向量搜索。在 Windows 上完成编译安装并不复杂,只要编译器与开发文件就位,核心步骤只有 3 条命令。
pgvector 是什么、能干什么
- 向量类型齐全:
vector(单精度,最高 2,000 维)、halfvec(半精度)、bit(二进制)、sparsevec(稀疏),可按场景选存储格式 - 距离度量完整:L2 距离
<->、内积<#>、余弦距离<=>、L1 距离<+>,二进制向量还有汉明与 Jaccard 距离 - 精确 + 近似两套搜索:小表可全表扫描做精确最近邻,大表建 HNSW 或 IVFFlat 索引做高速近似搜索
- 原生融入 SQL:向量列和普通列一样参与 JOIN、过滤、事务,任何带 Postgres 客户端的语言都能直接调用
- 典型适用场景:语义检索、RAG 问答、相似内容推荐、以图搜图等
动手前的 Windows 准备清单
| 工具 | 作用 | 验证方法 |
|---|---|---|
| x64 Native Tools Command Prompt for VS 2022 | 提供 MSVC 编译器cl.exe与nmake | 运行cl能看到编译器版本号 |
| PostgreSQL 13+(含 Development Files) | 提供头文件include\server与链接库postgres.lib | dir %PGROOT%\include\server\postgres.h能列出该文件 |
| PGROOT 环境变量 | 被 Makefile.win 用来定位 Postgres 的 bin、lib、share 目录 | echo %PGROOT%打印出安装路径 |
准备步骤按顺序执行:
- 安装 Visual Studio 2022,工作负载勾选"使用 C++ 的桌面开发"
- 安装 PostgreSQL,组件里务必勾选 Development Files
- 从开始菜单启动x64 Native Tools Command Prompt for VS 2022,安装阶段建议以管理员身份运行
- 拉取源码并进入目录:
cd %TEMP% git clone https://gitcode.com/GitHub_Trending/pg/pgvector cd pgvector从零到装好:只需 3 条命令
set "PGROOT=C:\Program Files\PostgreSQL\18"用途:告诉 nmake 你的 PostgreSQL 装在哪里。💡 版本号按你实际安装的目录修改,可用echo %PGROOT%确认。 预期输出:无输出,命令静默完成。
nmake /F Makefile.win用途:编译 src 下全部 C 源码,产出扩展动态库。 预期输出:过程打印若干编译日志,当前目录生成vector.dll。
nmake /F Makefile.win install用途:把vector.dll、vector.control及 SQL 脚本复制到 PostgreSQL 的 lib 与share\extension目录。 预期输出:一串copy成功日志,%PGROOT%\lib下出现vector.dll。
用 2 段 SQL 验证向量搜索是否生效
第一段:建扩展、建表并插入数据(每个要用的数据库都需执行一次建扩展):
CREATE EXTENSION vector; CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3)); INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'), ('[7,8,9]');第二段:按 L2 距离排序查询最近邻:
SELECT id, embedding <-> '[3,1,2]' AS distance FROM items ORDER BY distance LIMIT 1;返回的是距离值最小(即与查询向量[3,1,2]最接近)的那一行,说明向量搜索已生效;换成<=>即得到余弦距离排序。
卡住了?Windows 编译常见故障速查
| 报错现象 | 最可能原因 | 一行处理办法 |
|---|---|---|
PGROOT is not set | 新终端里 PGROOT 丢失或未设置 | 重新执行set "PGROOT=..."再编译 |
Cannot open include file: 'postgres.h' | PGROOT 指错或 Postgres 没装 Development Files | dir %PGROOT%\include\server\postgres.h核对路径 |
'cl' 不是内部或外部命令 | 没有从 VS 命令提示符启动 | 改用 x64 Native Tools Command Prompt 重进目录 |
error C2196: case value '4' already used | 用了 x86 命令行导致架构不匹配 | 换 x64 提示符,先nmake /F Makefile.win clean再编译 |
unresolved external symbol float_to_shortest_decimal_bufn | Postgres 17.0–17.2 与源码链接库不兼容 | 升级 PostgreSQL 到 17.3 及以上版本 |
Access is denied | 无权限写入 Program Files 目录 | 以管理员身份重开命令提示符执行 install |
装好之后你能做什么
- 能力一:为向量列建 HNSW 或 IVFFlat 索引,百万级以上数据也能走索引快速返回 Top-K,并可与 WHERE 条件混写做混合查询
- 能力二:用
halfvec半精度或二进制向量压缩内存,向量库越大收益越明显 - 能力三:向量检索结果直接参与 SQL 的 JOIN、聚合与事务,不必在两套系统间搬数据
编译优化示例:Makefile.win 默认已带/O2 /fp:fast开启自动向量化,若 CPU 支持 AVX2,可在那一行的OPTFLAGS中追加/arch:AVX2,提升向量运算吞吐。
下一步建议:
- 跑一遍仓库自带回归测试
nmake /F Makefile.win installcheck,确认你的环境行为一致 - 阅读 README.md 的 HNSW/IVFFlat 章节,学会
m、ef_construction、lists等参数调优
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考