news 2026/9/6 21:28:02

Windows 安装 pgvector 0.8.6 完整流程:从编译到向量检索只需 3 步

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows 安装 pgvector 0.8.6 完整流程:从编译到向量检索只需 3 步

Windows 安装 pgvector 0.8.6 完整流程:从编译到向量检索只需 3 步

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

pgvector 是一个开源的向量相似度搜索扩展,装上它之后,你不需要单独的向量数据库,直接就能在 PostgreSQL 里存储向量、按距离检索。本文带你完成 pgvector 0.8.6 的 PostgreSQL Windows 安装:从编译环境到可执行检索,全程约 10 分钟,照做即可。

前置准备:确认版本与工具链

安装前把下面这张表过一遍。版本不匹配是 Windows 下最常见的失败原因。

组件要求说明
PostgreSQL13 及以上,64 位建议直接装 18;0.8.1 起官方开始支持 Postgres 18
Visual Studio 2019/2022含 C++ 桌面工作负载安装器里勾选"使用 C++ 的桌面开发"组件
Git任意近期版本用于拉取 pgvector 源码
pgvectorv0.8.6 标签即本文示例版本

最容易踩的兼容坑:PostgreSQL 必须是 64 位版本,而编译命令必须使用 x64 工具命令提示符。32 位的 PostgreSQL 配上 64 位编译器会在链接阶段直接报错。

编译环境怎么打开:x64 Native Tools 提示符

在 Windows 开始菜单搜索x64 Native Tools Command Prompt for VS 2022,选择"以管理员身份运行"。这一步的意义有两点:它把 Visual Studio 的 C++ 编译器和nmake工具加载进当前会话;管理员权限则避免后续写Program Files目录时被拒绝。成功的标志是提示符开头显示x64 Native Tools Command Prompt字样。

六步完成安装:设置 PGROOT 到 nmake install

下面六条命令在同一个窗口依次执行。

  1. 设置 PostgreSQL 根目录。Makefile.win靠这个变量找postgres.h等头文件和链接库,路径改成你实际安装的版本目录(默认是C:\Program Files\PostgreSQL\18)。
rem 把 18 换成你实际安装的 PostgreSQL 版本目录 set "PGROOT=C:\Program Files\PostgreSQL\18"

成功标志:后续编译不再报找不到头文件。

  1. 拉取指定版本的源码,固定版本保证可复现。
cd %TEMP% git clone --branch v0.8.6 https://gitcode.com/GitHub_Trending/pg/pgvector cd pgvector

成功标志:克隆完成后当前目录为pgvector,里面有Makefile.win

  1. 编译。nmake会把src下的 C 源文件编译成目标文件,链接出vector.dll,编译参数自带/O2 /fp:fast自动向量化。
nmake /F Makefile.win

成功标志:末尾打印类似... vector.obj ... -> vector.dll的链接结果,没有任何error

  1. 安装到 PostgreSQL 目录。
nmake /F Makefile.win install

成功标志:%PGROOT%\lib下多出一个vector.dll%PGROOT%\share\extension下多了vector.controlvector--0.8.6.sql

  1. 用 psql 连上数据库,启用扩展:
CREATE EXTENSION vector;

成功标志:返回CREATE EXTENSION,且SELECT extversion FROM pg_extension WHERE extname = 'vector';查到 0.8.6。

  1. 到此完成。扩展默认装到postgres库之外的每个库都需要单独执行一次CREATE EXTENSION,记住这一点能省不少排查时间。

验收:一条 SQL 证明安装成功

下面这段最小脚本"建表→插两条向量→按距离检索",跑通即代表安装成功。

CREATE TABLE demo_items ( id bigserial PRIMARY KEY, embedding vector(3) ); INSERT INTO demo_items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'); SELECT id, embedding FROM demo_items ORDER BY embedding <-> '[3,1,2]' -- <-> 为 L2 距离 LIMIT 5;

预期输出两行,且[1,2,3]排在第一行——因为它离查询向量更近。

接着看一个真实场景:语义搜索。把一段文本的嵌入向量存进表,检索时同样用距离排序:

CREATE TABLE docs ( id bigserial PRIMARY KEY, content text, embedding vector(4) ); INSERT INTO docs (content, embedding) VALUES ('产品使用手册', '[0.9, 0.1, 0.0, 0.1]'), ('退货政策说明', '[0.1, 0.8, 0.1, 0.0]'); SELECT content, 1 - (embedding <=> '[0.85, 0.2, 0.05, 0.1]') AS similarity FROM docs ORDER BY embedding <=> '[0.85, 0.2, 0.05, 0.1]' -- 余弦距离,越小越相似 LIMIT 1;

输出应为产品使用手册,similarity 接近 1。<->是 L2 距离,<=>是余弦距离,<#>是内积,按业务语义选择即可。

进阶:HNSW 还是 IVFFlat,怎么选

数据量上万后,顺序扫描就不够用了,需要建近似索引。pgvector 提供两种:

维度HNSWIVFFlat
查询表现召回与速度平衡好同召回下更慢
构建成本慢、占内存多快、占内存少
写入代价插入略慢插入较快
适合场景在线查询为主冷数据、内存紧张
关键参数m(默认 16)lists,起点可取行数 / 1000

两种索引的创建方式:

CREATE INDEX ON demo_items USING hnsw (embedding vector_l2_ops); CREATE INDEX ON demo_items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100);

调优参数只需要记两个:

  • hnsw.ef_search(默认 40):建好 HNSW 后SET hnsw.ef_search = 100;可提高召回,代价是变慢;查询里加过滤条件时建议同时开启迭代扫描,否则结果可能不足LIMIT条。
  • maintenance_work_mem:构建大索引前调大,例如SET maintenance_work_mem = '2GB';。图能装进内存时 HNSW 构建显著更快,装不下时 PostgreSQL 会打印 NOTICE 提醒你加大。

高频排错 FAQ

1. 编译报Cannot open include file: 'postgres.h'

  • 现象:nmake 一启动就报找不到头文件。
  • 原因:PGROOT没设置,或指向了错误版本的 PostgreSQL 目录。
  • 修复:按实际路径重设PGROOT后再执行nmake /F Makefile.win

2. 报error C2196: case value '4' already used

  • 现象:编译中途报 C2196。
  • 原因:32 位与 64 位架构不匹配,例如用了普通命令提示符或 x86 工具。
  • 修复:改用 x64 Native Tools Command Prompt,先执行nmake /F Makefile.win clean,再重新编译安装。

3. 安装报Access is denied

  • 现象:编译通过,install 阶段复制文件失败。
  • 原因:当前窗口没有管理员权限,无法写入 PostgreSQL 安装目录。
  • 修复:以管理员身份重开 x64 Native Tools Command Prompt,重新执行 install。

4. Postgres 17.0–17.2 链接报unresolved external symbol float_to_shortest_decimal_bufn

  • 现象:编译全部通过,最终链接失败。
  • 原因:该符号在 17.0–17.2 的postgres.lib中缺失,属于已知问题。
  • 修复:把 PostgreSQL 升级到 17.3 或更高版本再编译。

版本升级也简单:装好新版文件后执行ALTER EXTENSION vector UPDATE;,0.8.1 到 0.8.6 的迁移脚本仓库里都已内置,sql目录下的升级脚本可参考。

结语

到这里,pgvector 在你的 Windows 环境中已具备完整的向量存储与检索能力,后续工作主要是围绕业务调索引参数。更多细节——量化、迭代扫描、稀疏向量——可直接查阅项目仓库内的 README 与 src/ 源码,动手比看文档更快。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 21:27:36

猫抓:如何在浏览器中嗅探并下载网页媒体资源指南

猫抓&#xff1a;如何在浏览器中嗅探并下载网页媒体资源指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓&#xff08;cat-catch&#xff0…

作者头像 李华
网站建设 2026/9/6 21:25:45

Buzz 离线语音转录指南:本地 Whisper 把录音转成文字与字幕

Buzz 离线语音转录指南&#xff1a;本地 Whisper 把录音转成文字与字幕 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_Trending/buz/buzz 处理采…

作者头像 李华
网站建设 2026/9/6 21:25:33

Video2X:免费AI视频超分框架,把老视频拉到4K只要一条命令

Video2X&#xff1a;免费AI视频超分框架&#xff0c;把老视频拉到4K只要一条命令 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Tre…

作者头像 李华