Windows 15 分钟实战:pgvector 源码编译安装,让 PostgreSQL 拥有向量检索能力
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
pgvector 把向量直接存进普通的 PostgreSQL 表,一条 SQL 就能做相似度查询,省掉一套独立向量库。下面是完整流程。
| 环境 | 版本 | 备注 |
|---|---|---|
| 系统 | Windows 10 / 11 | 64 位即可 |
| 数据库 | PostgreSQL 16 | 需 13+,17 系必须 17.3 及以上 |
| 工具链与扩展 | Visual Studio 2022、pgvector v0.8.6 | 从克隆到首次查询全程约 15 分钟 |
环境自检:四项依赖是否齐活?
动手前先过一遍清单,缺什么补什么:
| 组件 | 版本要求 | 说明 |
|---|---|---|
| PostgreSQL | 13+,本例用 16 | 编译要靠它的头文件与链接库;17.0~17.2 存在链接符号问题,用 17 系请选 17.3 及以上 |
| Visual Studio | 2022,勾选「C++ 桌面开发」工作负载 | 构建用的 nmake 底层依赖 MSVC 编译器,装的时候记得勾选这个工作负载 |
| Windows SDK | 随 VS 安装即可 | 一般随 VS 工具链自动带上;缺了会在编译时找不到 C 运行时头文件 |
| Git | 任意较新版本 | 负责拉取扩展源码 |
三步装好 pgvector
第一步|克隆源码,指向 PGROOT
先打开 "x64 Native Tools Command Prompt for VS 2022" 并以管理员身份运行。这么做有两个原因:编译器必须以 x64 模式工作才能匹配目标架构,而且 install 阶段要往C:\Program Files写文件,没有管理员权限会被拒绝。
然后把环境变量指向 PostgreSQL 安装根目录,构建脚本才知道去哪里找头文件、链接库,产物该放到哪:
set "PGROOT=C:\Program Files\PostgreSQL\16" cd %TEMP% git clone --branch v0.8.6 https://gitcode.com/GitHub_Trending/pg/pgvector pgvector cd pgvector dir Makefile.win目录里能看到 Makefile.win、vector.control 和 sql/ 目录这三样,克隆就算到位了。
第二步|编译、落盘与回归测试
三条 nmake 命令,依次完成编译、落盘、验证:
nmake /F Makefile.win nmake /F Makefile.win install nmake /F Makefile.win installcheck- 第一条编译 src/ 下全部 C 源码,链接出扩展动态库
vector.dll,结束时能看到它生成、全程无 error 输出即可。 - 第二条负责落盘:动态库复制进 PGROOT 的 lib 目录,.control 文件和 SQL 脚本放进 share/extension 目录。
- 第三条跑内置回归,把 test/sql/ 里类型、距离、索引相关的用例执行一遍,全部通过时输出以
All N tests passed收尾。
架构拿不准或者想重新干净地编译,先执行nmake /F Makefile.win clean清掉旧产物再构建。
第三步|用 4 条 SQL 验收 🔍
用 psql 依次执行下面的语句,把启用扩展、查版本、建表、灌数据、最近邻查询串成一条完整链路:
CREATE EXTENSION vector; SELECT vector_version(); CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3)); INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'); SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;vector_version()返回0.8.6,说明扩展已可用;最近邻查询返回 2 行,且[1,2,3]排在[4,5,6]前面,此时就可以认定 pgvector 安装成功且能正常查询。
报错速查表
Windows 上编译出问题多半逃不出下面四种,对号入座即可:
| 报错原文 | 触发原因 | 修复动作 |
|---|---|---|
Cannot open include file: 'postgres.h' | PGROOT 没指到正确的安装根目录 | 确认该目录下有include\server子目录,再在当前会话重新指向并重编 |
error C2196: case value '4' already used | 在 x64 命令行之外编译,二进制架构不匹配 | 换回 "x64 Native Tools Command Prompt",先执行nmake /F Makefile.win clean再重新编译 |
unresolved external symbol float_to_shortest_decimal_bufn | 服务端版本落在 PostgreSQL 17.0~17.2 区间 | 升级到 17.3 及以上,或改用其他版本 |
Access is denied | 落盘目标 lib 目录位于C:\Program Files,普通权限写不进去 | 以管理员权限重开 VS 原生命令行,再执行 install |
装完之后 📦
- 4 种向量类型、4 个上限:
vector最多 2000 维,halfvec最多 4000 维,bit最多 64000 维,sparsevec最多 1000 个非零元素。 - 距离算子各管一摊:
<->L2、<#>负内积、<=>余弦、<+>L1;bit类型另有<~>和<%>两个算子。 - 近似索引二选一:HNSW 查询更快,
CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);IVFFlat 构建更快,创建时可带参数,如WITH (lists = 100)。 hnsw.ef_search、ivfflat.probes、迭代扫描等进阶调优,见仓库自带的 README.md。
装完之后路径也是现成的:把items里的 3 维示例数据换成你自己的 embedding,建一个 HNSW 索引,用ORDER BY embedding <-> '[...]' LIMIT 5跑出第一条真实的向量相似度查询。
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考