10分钟给PostgreSQL装好pgvector:Windows下向量相似度搜索部署指南
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
装完之后,你的PostgreSQL就能直接用SQL跑向量相似度查询:存储单精度、半精度、二进制和稀疏向量,支持精确与近似最近邻搜索,L2、余弦、内积等距离度量开箱即用。这就是Postgres的开源向量搜索扩展pgvector。整个过程在Windows上大约10分钟,前提是你已经装好PostgreSQL 16+,走编译路线的话还需要一套Visual Studio构建工具。
🧭 Windows下安装pgvector:预编译还是源码编译?
| 你的情况 | 推荐路线 | 说明 |
|---|---|---|
| 只想用起来,不想碰编译器 | 预编译路线 | 把DLL和control文件放进PostgreSQL对应目录 |
| 有VS 2019+、版本需严格对齐、或想改源码 | 源码编译路线 | 两条nmake命令完成构建与安装 |
第一次装建议先走预编译路线,它像开箱即用的成品,变量最少。只有当扩展版本和数据库版本对不上、需要自己重新构建时,才值得花时间走编译路线。
准备工作:PostgreSQL 16+与编译工具链
- PostgreSQL 16.1+,推荐EDB官方安装包,默认路径
C:\Program Files\PostgreSQL\16 - 源码编译路线额外要求Visual Studio 2019+,并安装"使用C++的桌面开发"工作负载
- pgvector源码(克隆命令见下方安装步骤)
编译路线唯一的配置项是PGROOT,指向PostgreSQL安装目录,构建脚本会基于它自动找到include、lib、share目录。
安装pgvector:预编译路线
把官方发布页下载的vector.dll放入PostgreSQL的lib目录(如C:\Program Files\PostgreSQL\16\lib),再把vector.control和对应版本的.sql文件放入share\extension目录。文件就位后不需要改任何配置。
安装pgvector:nmake源码编译
打开"x64 Native Tools Command Prompt for VS",依次执行:
set "PGROOT=C:\Program Files\PostgreSQL\16" cd %TEMP% git clone --branch v0.8.6 https://gitcode.com/GitHub_Trending/pg/pgvector cd pgvector nmake /F Makefile.win nmake /F Makefile.win install构建逻辑全部写在Makefile.win中,它会编译src/下的C源码生成vector.dll,并安装到PGROOT指向的目录。
验证:向量扩展验证SQL
用psql连上目标数据库执行:
CREATE EXTENSION vector; SELECT NULL::vector;第二条语句正常返回空向量值即安装完成。注意CREATE EXTENSION需要在每个要使用它的数据库里各执行一次。
⚠️ 踩坑速查:现象/原因/处理
最典型的报错长这样,基本都是在Windows上误用了Unix风格的make:
process_begin: CreateProcess(NULL, uname -s, ...) failed. Makefile:16: pipe: No error| 现象 | 原因 | 处理 |
|---|---|---|
| 出现上述process_begin报错 | 命令环境不认识uname等Unix命令 | 换到VS原生工具命令提示符,执行nmake /F Makefile.win |
| 编译通过但CREATE EXTENSION提示找不到扩展 | pgvector与PostgreSQL大版本不匹配 | 核对扩展构建版本与数据库版本,重新安装匹配版本 |
| lib目录下的DLL无法覆盖 | PostgreSQL服务仍在运行并占用文件 | 先停止PostgreSQL服务,替换文件后再启动 |
| 写入扩展目录提示拒绝访问 | 命令提示符未以管理员运行,或服务账户权限不足 | 右键"以管理员身份运行"命令提示符,确认服务账户对lib与share目录可写 |
🔍 延伸使用:建向量表与相似性查询
扩展就位后的最小两个动作:
- 建一张带向量列的表:
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(4)); - 用距离操作符找最近邻:
ORDER BY embedding <-> $1(L2距离)或ORDER BY embedding <=> $1(余弦距离)。
数据量大以后,在向量列上建HNSW或IVFFlat索引即可保持查询延迟稳定,两者都是pgvector内置的访问方法。
到这里,向量搜索和业务数据共用同一条数据库连接,pgvector只是多了一条SQL的事。
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考