PostgreSQL pgvector Windows 安装实操:不另建向量库,跑通第一次向量搜索
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
pgvector 给 PostgreSQL 加上了向量相似性搜索,向量数据直接和业务表存在同一个库里。读完这篇,你能在 Windows 上完成 pgvector 的部署,并用 3 条 SQL 验证最近邻检索真的可用。
先选路:预编译包还是源码
决策规则很简单:新手和大多数生产场景,直接用预编译包,十分钟搞定;只有当你需要特定版本、或者要改源码时,才走源码编译这条路。
主流程:预编译包安装
- 以管理员身份打开命令提示符,先确认环境。
C:\> postgres --version输出版本号在 13 及以上即可(本文以 PostgreSQL 16 为例)。顺手看一眼系统盘剩余空间,预留 1GB 以上。这步成功的标志:版本号和磁盘空间都满足要求。
- 把编译好的
vector.dll拷进 PostgreSQL 的 lib 目录。
copy vector.dll "C:\Program Files\PostgreSQL\16\lib\"- 把
vector.control和全部vector--*.sql脚本拷进扩展目录。
copy vector.control "C:\Program Files\PostgreSQL\16\share\extension\" copy vector--*.sql "C:\Program Files\PostgreSQL\16\share\extension\"注意 sql 脚本的落点是share\extension,不是share,放错目录后面会报找不到控制文件的错。文件就位后,扩展就具备创建条件了。
- 重启 PostgreSQL 服务。
net stop postgresql-x64-16 net start postgresql-x64-16服务名里的版本号按你的安装调整,也可以在 services.msc 里找到对应服务右键重启。
- 连进数据库建扩展。
psql -U postgresCREATE EXTENSION vector;没有报错、命令返回CREATE EXTENSION,说明加载成功。
备选:源码编译
这条路线只在需要指定版本或二次开发时用。关键步骤与主流程的差异如下:
- 不用普通 cmd,用管理员身份打开 Visual Studio 的 x64 Native Tools Command Prompt,保证编译器和 C++ 工具链就位。
- 在命令行内设置 PostgreSQL 安装路径:
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 installinstall目标会自动把vector.dll、vector.control和 sql 脚本拷进对应目录,第 2、3 步的手动复制可以省掉,之后同样重启服务、建扩展。
验收:3 条 SQL 证明功能可用
建一张最小的向量表,写入两条测试数据,再按 L2 距离做一次最近邻查询:
CREATE TABLE product_embeddings ( id SERIAL PRIMARY KEY, embedding vector(3), label text ); INSERT INTO product_embeddings (embedding, label) VALUES ('[1, 2, 3]', 'keyboard'), ('[4, 5, 6]', 'mouse'); SELECT label, l2_distance(embedding, '[3, 1, 2]') AS distance FROM product_embeddings ORDER BY distance LIMIT 2;预期输出:
label | distance ----------+---------- keyboard | 2.45 mouse | 5.74keyboard 排第一,说明距离计算和排序都正常,pgvector 已可投入使用。
避坑:Windows 用户最常卡住的 3 处
报"could not open extension control file"→vector.control没放进share\extension,多半落错了层级的share目录 → 按第 3 步的路径重新放置,再重启服务。
报"could not load library vector.dll"→ dll 与 PostgreSQL 架构不匹配,或没拷进lib目录 → 确认用的是 64 位编译产物且文件在C:\Program Files\PostgreSQL\16\lib。
nmake 提示 PGROOT is not set→ 编译前没在命令行里设置环境变量 → 在 x64 Native Tools 提示符里先执行set "PGROOT=..."再跑 nmake。
装完后:索引与内存
数据量上来后,全表扫描的查询会慢。给向量列建 pgvector HNSW 索引:
CREATE INDEX ON product_embeddings USING hnsw (embedding vector_l2_ops);几千行以上、且最近邻查询是高频操作时,HNSW 是首选索引类型;几百行的表直接裸查就行,不用建。内存方面,shared_buffers和work_mem按机器实际情况上调即可,具体取值建议参考 PostgreSQL 官方文档的调优章节。
到这里,文本 embedding 可以直接进业务库做相似检索,用户行为向量也能为个性化推荐供数,不用再单独搭一套向量数据库。后续版本升级时,仓库 sql/ 目录里带全套跨版本脚本,一条ALTER EXTENSION vector UPDATE;就能完成迁移,升级前先在测试库跑一遍验证。
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考