ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

pgvector 安装实战:Windows 上 30 分钟跑通向量搜索,附 5 个高频报错对照

pgvector 安装实战:Windows 上 30 分钟跑通向量搜索,附 5 个高频报错对照 pgvector 安装实战Windows 上 30 分钟跑通向量搜索附 5 个高频报错对照【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector如果你要在自己的 PostgreSQL 里存向量、做相似度检索手边又只有 Windows 这一台机器这篇能帮你把 pgvector 安装走通一台配置好的 x64 终端、大约 30 分钟最后拿到的是一份能返回最近邻结果的 vector.dll外加一条跑通了的 SQL 证明装好了。全程真正需要记住的只有两条编译命令和两段查询。环境自检清单动手前花 60 秒确认碰编译器之前先把这张表过一遍。Windows 上绝大多数编译失败都不是代码问题而是下面四件事没就位检查项要求确认方式编译器装了「C 桌面开发」工作负载的 Visual Studio终端输入cl打印用法说明即通过Postgres13 及以上版本安装时带开发文件17 系列需 17.3安装目录下有include\server\postgres.h权限管理员终端终端标题栏带「管理员」字样路径清楚 Postgres 安装根目录在哪下文 PGROOT 会用到一分钟自检就一条命令在 VS 的 x64 命令行提示符里跑怎么打开见下节cl dir C:\Program Files\PostgreSQL\18\include\server\postgres.h第一行能打出编译器用法、第二行能列出那个头文件说明具备开工条件。第二条命令如果报「找不到路径」要么版本号不对要么装 Postgres 时没勾开发文件先去补别急着进编译。构建主线从打开终端到生成 vector.dll整个构建是一条连续的线下面按顺序走每条命令都说明为什么跑它、成功后屏幕上会出现什么。第一步打开正确的终端。从开始菜单搜 x64 Native Tools Command Prompt for VS 2022右键以管理员身份运行。这个提示符里 cl.exe 已经在 PATH 里管理员权限则是后面把文件拷进 Program Files 时需要的。⚠️ 不要用普通 PowerShell 或 cmd 顶替后面会报「cl 不是内部或外部命令」白等一轮。第二步告诉构建脚本 Postgres 在哪。Windows 的构建脚本 Makefile.win 只认一个变量 PGROOT头文件、链接库、安装目录全靠它推算不设会直接中止set PGROOTC:\Program Files\PostgreSQL\18 echo %PGROOT%echo 能回显刚设的路径就对。两个常见分叉版本是 16 或 17 的把路径里的数字改掉机器上装了好几个 Postgres 的PGROOT 指向哪个扩展就装到哪个想清楚再填。第三步拉源码并编译。cd %TEMP% git clone --branch v0.8.6 https://gitcode.com/GitHub_Trending/pg/pgvector cd pgvector nmake /F Makefile.winnmake 是 MSVC 自带的命令行构建工具地位相当于 Linux 的 make。这条命令会把 src/ 下 19 个 C 源文件——向量类型、HNSW 索引、IVFFlat 索引这些模块——逐个编译再链接成一个 dll。跑一两分钟后结尾会看到一行以 vector.dll 收尾的链接输出这就是你要的产物。第四步装进 Postgres 并核对落盘位置。nmake /F Makefile.win install dir %PGROOT%\lib\vector.dll dir %PGROOT%\share\extension\vector.controlinstall 这个目标会把 dll 拷进 lib 目录把 vector.control 描述文件和各版本 SQL 脚本拷进 share\extension。两条 dir 都能列出文件文件侧就齐了接下来只差进数据库激活它。 环境变量只对当前终端有效。下次换个新终端再编译记得先重新 set 一遍 PGROOT。第一次查询一条 SQL 证明它活了用 psqlPostgres 自带的命令行客户端连上数据库走最小验证路径——建扩展、建表、插数据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]);vector(3) 表示三维单精度浮点向量。然后是关键的一句按 L2 距离欧氏距离值越小越近找离[3,1,2]最近的向量SELECT id, embedding FROM items ORDER BY embedding - [3,1,2] LIMIT 1;如果返回id | embedding ----------------- 1 | [1,2,3] (1 row)就是装好了。离查询向量最近的第一行正确命中pgvector 从这一刻起是你库里的一等公民。卡住了按屏幕上的报错对号入座终端炸了别慌看是哪一句照做就行如果 nmake 第一行就打出PGROOT is not set—— 漏了第二步的 set或者你换了一个新终端。在当前窗口重新 set 再编译即可源码不用重拉。如果出现Cannot open include file: postgres.h—— PGROOT 指错了或装的 Postgres 是不含开发文件的版本。用自检那节的 dir 命令看看哪个路径下真有这个头文件把 PGROOT 指过去。如果出现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 之间这几个版本缺符号。升级 Postgres 到 17.3 及以上或改用其他版本pgvector 本身不用动。如果 install 那步报Access is denied—— 终端不是管理员身份。关掉以管理员身份重开重跑安装步骤。装好之后往哪走扩展只是入口接下来几个方向都离你的日常不远建近似索引。几千行直接 ORDER BY 没问题量大了必须上索引。仓库里有现成范例test/sql/hnsw_vector.sql 演示 HNSW分层可导航小世界图索引test/sql/ivfflat_vector.sql 演示 IVFFlat倒排文件索引。换距离算子。除了 L2 的-内积#、余弦、L1都支持把 ORDER BY 里的算子换掉就行。跑一遍官方回归测试。nmake /F Makefile.win installcheck会执行 test/sql/ 下的全套用例升级 Postgres 之后想验证环境没坏一条命令搞定。调编译优化。Makefile.win 默认带了/O2 /fp:fast让编译器自动向量化想固定指令集可以在 Makefile.win 的 OPTFLAGS 变量里加/arch:参数。刚才这 30 分钟你把一堆 C 源码变成了 Postgres 里的 vector.dll并用一条真实查询确认它活着。现在就可以建自己的向量表把最近邻搜索跑在真实数据上了。【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表