Windows 编译 pgvector 完整指南:工具链、报错与验证一次讲清
2026/9/13 17:05:07 网站建设 项目流程

Windows 编译 pgvector 完整指南:工具链、报错与验证一次讲清

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

在 Windows 上编译 PostgreSQL 向量搜索扩展 pgvector,坑点集中在工具链:头文件缺失、位数选错、环境变量没设,报错信息和真实原因往往对不上。本文给出一条实测可用的完整路径:先做三项自检,再用两条 nmake 命令完成构建,错误统一收进一张速查表,最后做安装验证和可选优化。

编译前三项检查:编译器、头文件、环境变量

任何一条 nmake 命令跑起来之前,先把三个前置条件摆齐。后面所有报错,基本都能回溯到这三项之一。

Visual Studio 2022 组件勾选清单

编译器来自 Visual Studio,但不需要 IDE,只要 C++ 构建工具。安装 Visual Studio 2022(社区版即可)时按下表勾选:

类型勾选项
工作负载使用 C++ 的桌面开发
单个组件C++ CMake tools for Windows、Windows SDK

装完后从开始菜单打开x64 Native Tools Command Prompt for VS 2022,并建议用管理员身份运行。这个提示符启动时会自动加载 vcvars64.bat,把 MSVC 工具链加进 PATH,后续所有命令都在它里执行,安装阶段也不容易碰权限报错。旧版 Visual Studio 未在当前 Makefile.win 上验证过兼容性,不建议使用。

PostgreSQL 开发文件安装

编译需要 PostgreSQL 的头文件和postgres.lib库。Windows 安装包默认就带这些文件,关键是确认它们在你的安装目录下存在(<版本号>换成实际值):

  • %PGROOT%\include\server\postgres.h
  • %PGROOT%\lib\postgres.lib

版本建议 13 及以上(这是 README.md 中给出的支持下限),下文示例用 18。如果你的安装方式带"开发文件"选项,记得在安装时勾选。

PGROOT 环境变量设置与验证

Makefile.win 的第一件事就是检查 PGROOT,没设会直接中断构建并提示PGROOT is not set。在当前命令行窗口设置(set只对当前会话有效,下次要重新设):

set "PGROOT=C:\Program Files\PostgreSQL\18" dir %PGROOT%\include\server\postgres.h

第二行是验证手段:应输出该文件的目录信息。提示"找不到文件"说明路径写错或 PostgreSQL 没装完整。

两条 nmake 命令:从克隆到构建成功的完整路径

环境就绪后,整个构建就是两件事:克隆代码,然后 nmake 编译加安装。

编译命令

克隆到临时目录,避免污染其他项目:

cd %TEMP% git clone --branch v0.8.6 https://gitcode.com/GitHub_Trending/pg/pgvector.git cd pgvector nmake /F Makefile.win nmake /F Makefile.win install

第一条 nmake 编译 src/ 下的 19 个 .c 文件并产出vector.dll;第二条在编译基础上把产物拷进 PostgreSQL 目录。输出很长,只需盯最后几行:看到生成了 vector.dll 且没有 error 字样,编译就算成功。

编译报错速查表

实际会碰到的报错种类不多。对照 README.md 的 Windows 安装说明一节,收拢成一张表:

现象原因修复
PGROOT is not set环境变量没设或没设对按上一节重设,echo %PGROOT%确认
Cannot open include file: 'postgres.h'PGROOT 指向的目录缺头文件核对%PGROOT%\include\server\postgres.h是否存在
error C2196: case value '4' already usedx86/x64 编译环境混用换到 x64 Native Tools 提示符,nmake /F Makefile.win clean后重编
unresolved external symbol float_to_shortest_decimal_bufnPostgreSQL 17.0–17.2 的已知链接问题升级 PostgreSQL 到 17.3+
'cl' 不是内部或外部命令不在 MSVC 环境里换到 x64 Native Tools Command Prompt for VS 2022
安装时Access is denied服务占用文件或权限不足管理员运行提示符,停掉 PostgreSQL 服务后重跑 install
链接阶段报postgres.lib相关错误库文件缺失确认%PGROOT%\lib\postgres.lib存在

按表格从上到下处理第一条命中的错误即可,多数情况不需要往下看。停服务时注意服务名随版本变化(形如postgresql-x64-18),不确定就先执行sc query type= service state= all | findstr /i postgres查一下。

安装验证:三个产物加一条 SQL

装完不等于能用,用文件检查和扩展加载两步确认。

检查三个产物

install 目标会把产物拷到 PGROOT 下的三个位置,逐一确认:

dir %PGROOT%\lib\vector.dll dir %PGROOT%\share\extension\vector.control dir %PGROOT%\share\extension\vector--*.sql

三行都应列出文件。vector--*.sql决定扩展可升级的版本序列,当前基线版本 0.8.6 见 vector.control。

SQL 功能验证

打开 psql,两条 SQL 就能确认扩展可用:

CREATE EXTENSION vector; SELECT l2_distance('[1,2,3]'::vector, '[3,2,1]'::vector);

第一行在当前库创建扩展(每个库执行一次);第二行返回一个数值距离,说明向量类型和距离函数都已注册。

可选:优化开关与参考资料

最后两个可选项,不改也能正常用。

  • Makefile.win 默认已带/O2 /fp:fast启用 MSVC 自动向量化;CPU 支持 AVX2 时,可把文件里的OPTFLAGS一行改为OPTFLAGS = /arch:AVX2后再编译。⚠️ 老 CPU 不要加/arch:AVX2,运行时会直接崩溃。
  • 用 PostgreSQL 19+ 编译时,Makefile.win 会自动补/std:c11,无需手动处理。

版本变更历史见 CHANGELOG.md,Windows 安装细节以 README.md 的 Installation Notes - Windows 一节为准。至此 pgvector 在 Windows 上的编译、排错、验证全部走完,后续换版本重编只需重跑上面那两条 nmake 命令。

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询