FEATURED · 精选文章

pgvector Windows 编译实战:3 步 nmake 构建,7 类典型报错按阶段排查

发布时间 / 2026/9/6 16:59:40
来源 / 创域科博编辑部
栏目 / 资讯中心
pgvector Windows 编译实战:3 步 nmake 构建,7 类典型报错按阶段排查 pgvector Windows 编译实战3 步 nmake 构建7 类典型报错按阶段排查【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvectorpgvector 是 Postgres 的向量相似度检索扩展。本文以 Windows 为平台讲清在 Visual Studio nmake 工具链下本地编译并安装 vector.dll 的全过程开工前要核对什么、从拉取源码到安装只需哪三条命令、遇到每类真实报错如何定位修复最后给出一次可执行的相似度查询验收。开工前核对 5 项前置条件编译失败大多出在前置环境而不是编译命令本身。按下面这份清单逐项验证通过后再动手前置项要求验证方法Visual Studio 2022已安装“使用 C 的桌面开发”工作负载含 MSVC 编译器与 Windows SDK打开x64 Native Tools Command Prompt for VS 2022后执行cl能输出版本号PostgreSQL 服务器13 及以上若用 17 系列选 17.3原因见 3.5dir %PGROOT%\include\server\postgres.h有返回链接库随 PostgreSQL 一起安装无需单独获取dir %PGROOT%\lib\postgres.lib有返回命令行权限管理员权限的命令提示符安装步骤要写入 Program Files 下的系统目录提示符标题栏含 Administrator目标版本确认你要装的 pgvector 版本与本机 Postgres 版本兼容见 2.1 的--branch参数其中PGROOT是给编译器的一块“路牌”Makefile.win 里所有头文件、库文件和安装目标目录都以它作为根第 27–32 行指错一层后面连环报错。用 3 步完成获取、编译、安装以下命令均在该管理员原生命令提示符中执行。第 1 步获取源码并设置 PGROOTset PGROOTC:\Program Files\PostgreSQL\16 cd %TEMP% git clone --branch v0.8.6 https://gitcode.com/GitHub_Trending/pg/pgvector.git cd pgvector验收dir Makefile.win vector.control两个文件都在echo %PGROOT%与上面 set 的值一致。注意set只作用于当前窗口换窗口要重新设置。第 2 步编译nmake /F Makefile.win✅ 验收源码根目录生成vector.dll、vector.lib以及sql\vector--0.8.6.sql版本号随你 clone 的标签变化。第 3 步安装nmake /F Makefile.win installinstall 目标Makefile.win 第 61–66 行会把vector.dll拷入%PGROOT%\lib把vector.control和各版本升级 SQL 拷入%PGROOT%\share\extension。✅ 验收dir %PGROOT%\lib\vector.dll dir %PGROOT%\share\extension\vector.control两条都有文件记录即安装落位。按失败阶段排查 7 类典型报错3.1 环境阶段nmake 报 PGROOT is not set症状nmake 刚启动就输出!error PGROOT is not set对应 Makefile.win 第 25 行一条源文件都没编译。原因当前窗口没设置 PGROOT。修复在同一个窗口内重新set PGROOT...并用echo验证。若设置后仍报同样错误说明路径层级指错——正确指向是...\PostgreSQL\16这一层再高一层...\PostgreSQL就取不到include\server。3.2 编译阶段cl.exe 不是内部或外部命令症状第一个编译任务即报cl.exe is not recognized as an internal or external command。原因当前终端没有加载编译器环境。修复从开始菜单改用x64 Native Tools Command Prompt for VS 2022管理员必须沿用普通提示符时先执行一次call C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat3.3 编译阶段Cannot open include file: postgres.h症状C1083: Cannot open include file: postgres.h: No such file or directory。原因PGROOT 指向错误或 PostgreSQL 安装缺少头文件目录。修复执行dir %PGROOT%\include\server\postgres.h确认存在不存在则重新安装该版本 PostgreSQLWindows 标准安装包默认含头文件。3.4 编译阶段error C2196: case value 4 already used症状编译中途报error C2196: case value 4 already used。原因架构不匹配——实际不在 x64 环境中编译如误开了 x86 Native Tools 提示符。修复换用x64 Native Tools Command Prompt先清理再重编避免残留中间产物干扰nmake /F Makefile.win clean nmake /F Makefile.win3.5 链接阶段LNK2019 无法解析的外部符号症状源文件全部编译通过最后链接 DLL 时报LNK2019: unresolved external symbol float_to_shortest_decimal_bufn。原因Postgres 17.0–17.2 的已知缺陷postgres.lib 未导出该符号。修复把本机 PostgreSQL 升到 17.3 及以上再重新编译。若 LNK2019 报的是其它符号先执行dir %PGROOT%\lib\postgres.lib确认 PGROOT 指向的确实是当前在用的那套 Postgres 安装。3.6 安装阶段copy 时 Access is denied症状install 目标的某条copy语句报Access is denied。原因对%PGROOT%\lib没有写权限默认安装在 Program Files 下。修复改用管理员提示符重跑nmake /F Makefile.win install若个别文件被服务占用先net stop postgresql-x64-16安装完成后net start postgresql-x64-16恢复。3.7 加载阶段CREATE EXTENSION vector 找不到 control 文件症状ERROR: could not open extension control file .../vector.control: No such file or directory。原因install 没跑完或 control 文件没落到%PGROOT%\share\extension。修复按 2.3 的两条dir命令复核产物缺哪个补哪一步文件齐备后确认CREATE EXTENSION vector是在目标数据库会话里执行的——DLL 只装一次但每个要用到的库都要各自启用。验收从安装产物到一次真实相似度查询4.1 确认 vector.dll 安装位置dir %PGROOT%\lib\vector.dll dir %PGROOT%\share\extension\vector.control预期两条命令均返回文件记录。4.2 加载扩展并跑通向量相似度查询用 psql 连入目标数据库CREATE EXTENSION vector;预期返回CREATE EXTENSION。CREATE TABLE test_vec (id int, embedding vector(3)); INSERT INTO test_vec VALUES (1, [1,2,3]), (2, [10,10,10]); SELECT id, embedding - [2,1,3] AS dist FROM test_vec ORDER BY dist ASC LIMIT 1;✅ 预期返回1 | 1.414214向量[1,2,3]到[2,1,3]的欧氏距离为 √2说明类型、运算符、索引扩展全部生效。求助入口与可选优化遇到本文未覆盖的报错完整保存 nmake 输出连同 PostgreSQL 版本号到 pgvector 项目的 Issue 跟踪器提交或在 README 的 “Installation Notes - Windows” 一节对照自查。性能相关Makefile.win 第 17 行默认已带/O2 /fp:fast若本机 CPU 支持 AVX2可把第 13 行的OPTFLAGS 填为/arch:AVX2后重编距离计算会生成更完整的 SIMD 指令不支持 AVX2 的旧机器不要加该参数。换标签或改参数前用nmake /F Makefile.win clean清掉全部中间产物避免旧 .obj 混入新构建。【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻