
30分钟在Windows上编译pgvector从零到跑通向量搜索【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvectorpgvector 是 Postgres 最受欢迎的开源向量搜索扩展向量与业务数据存在同一张表里直接就能跑最近邻查询。本文带你走通 Windows 下编译安装 pgvector 的完整流程最后用几条 SQL 验证结果。动手前的环境清单Windows 上的编译报错九成是环境问题。先别碰 nmake把下面三项检查跑一遍✅带 C 支持的 Visual Studio 2022装社区版安装界面勾选使用 C 的桌面开发可选组件里选C CMake 工具和对应版本的 Windows SDK验证终端里敲cl.exe能打出编译器版本信息即可✅PostgreSQL 13 的开发文件安装时勾选Development Files否则头文件和库文件缺失验证%PGROOT%\include\server\postgres.h存在✅PGROOT 环境变量PGROOT 是最容易配错的一项。PGROOT 怎么设才对指向 PostgreSQL 实际安装的目录验证echo %PGROOT%打印出路径dir %PGROOT%\include\server\postgres.h能列出文件三项合起来就一张表缺了它编译直接挂负责什么怎么确认Visual Studio C 编译器提供 MSVC 编译环境cl.exe能打印版本信息PostgreSQL 开发文件提供头文件与库文件%PGROOT%\include\server\postgres.h存在PGROOT 环境变量告诉 nmake PG 装在哪echo %PGROOT%输出真实安装路径从 clone 到 install四条命令搞定 先以管理员身份打开x64 Native Tools Command Prompt for VS 2022。因为 install 这一步要直接写 PG 的安装目录普通权限经常卡住。在终端里先设路径变量:: 告诉整个编译流程PostgreSQL 装在哪里 set PGROOTC:\Program Files\PostgreSQL\18 :: 回显一遍确认变量真的生效了 echo %PGROOT%路径里的版本号换成你实际的安装目录。变量配好后去拉源码。clone 到临时目录更干净不占你自己的工程位置:: 把源码 clone 到临时目录 cd %TEMP% git clone https://gitcode.com/GitHub_Trending/pg/pgvector.git cd pgvector :: Windows 下只认 win 专属的 makefile nmake /F Makefile.win顺利的话src 下会生成一堆 .obj当前目录出现 vector.dll。编译到此结束接下来就是装进数据库:: 把 dll、control 和 sql 复制进 PGROOT 对应目录 nmake /F Makefile.win install装完花 30 秒确认两个关键文件:: 扩展本体和控制文件都应该出现在这里 dir %PGROOT%\lib\vector.dll dir %PGROOT%\share\extension\vector.control两个文件都列出来说明文件层面已经齐了。装完了跑一句 SQL 确认连接数据库启用扩展-- 启用扩展 CREATE EXTENSION vector;看到vector出现在\dx列表里说明装好了。然后是最近邻查询的最小路径建表、插数据、查最近邻。向量最近邻查询怎么写ORDER BY 里用距离算子再接 LIMIT-- 建表3 维向量列 CREATE TABLE test_vectors ( id SERIAL PRIMARY KEY, embedding vector(3) ); -- 插入 3 个向量 INSERT INTO test_vectors (embedding) VALUES ([1.0, 2.0, 3.0]), ([4.0, 5.0, 6.0]), ([7.0, 8.0, 9.0]); -- L2 最近邻找离 [3,2,1] 最近的一条 SELECT id, embedding FROM test_vectors ORDER BY embedding - [3.0, 2.0, 1.0] LIMIT 1; -- 余弦相似度1 减去余弦距离按相似度从高到低排 SELECT id, 1 - (embedding [3.0, 2.0, 1.0]) AS cosine_similarity FROM test_vectors ORDER BY cosine_similarity DESC LIMIT 3;结果怎么判读第一条查询应返回 id1因为 [1,2,3] 与 [3,2,1] 的 L2 距离最小第二条返回 3 行、按相似度降序。两条查询都能无错返回数据安装到查询这条链路就算打通了。报错按报错信息对 ⚠️nmake 编译报错最常见的就那几种直接拿报错关键词查下面的表报错关键词一行原因一行修复PGROOT is not setPGROOT 没设置或当前终端里没生效先执行set PGROOTC:\Program Files\PostgreSQL\18再echo %PGROOT%核对无法打开包括文件: postgres.hPG 开发文件没装或 PGROOT 指错了目录重装 PostgreSQL 并勾选Development Files确认%PGROOT%\include\server\postgres.h存在cl.exe 不是内部或外部命令用的是普通 cmd不是 VS 开发者终端改用x64 Native Tools Command Prompt for VS 2022或先执行call C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.batLNK2019链接错误找不到 PG 库文件链接阶段定位不到 postgres.lib检查 Makefile.win 里的库路径确保指向$(LIBDIR)\postgres.lib即%PGROOT%\libAccess denied没有写 PG 目录的权限或文件被占用管理员身份运行或net stop postgresql-x64-18停服务后 install再net start postgresql-x64-18装完之后的提速与玩法 编译提速Makefile.win 里 PG_CFLAGS 默认已带/O2 /fp:fast。想再快一点可以加一条指令集参数让编译器为 CPU 生成向量化指令PG_CFLAGS $(PG_CFLAGS) $(OPTFLAGS) /O2 /fp:fast /arch:AVX2因为 AVX2 是 CPU 的向量指令集编出来的向量运算代码速度明显更快。如果你的 CPU 不支持 AVX2就改成/arch:SSE2。编译过程本身也能并行nmake 支持多开线程:: 4 个线程同时编译缩短等待时间 nmake /F Makefile.win -j4装完之后能玩什么四种向量类型单精度向量标准 32 位浮点最常用半精度向量16 位浮点存储省一半二进制向量面向二值特征表示稀疏向量面向大量为 0 的高维数据六种距离度量L2 距离欧几里得距离内积距离余弦距离L1 距离曼哈顿距离汉明距离用于二进制向量Jaccard 距离用于稀疏向量三种搜索方式精确最近邻逐行扫描保证找到最相似的近似最近邻靠 IVFFlat 和 HNSW 两种算法做高速搜索混合搜索向量相似性叠加传统 SQL 过滤条件收尾从 VS 到 nmake整个流程并不长。pgvector 装好之后向量存储和最近邻查询都在 PostgreSQL 里完成不用另养一套向量数据库。最常踩的坑就是 PGROOT 和编译器环境清单过一遍编译基本就能一次通过。接下来可以做三件事通读 README了解 IVFFlat 与 HNSW 建索引的细节。搭一个小应用比如推荐系统或相似图搜索把 pgvector 跑进真实业务。数据量上来后调整索引参数在查询速度和精度之间找平衡。【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考