Windows给Postgres加向量检索:pgvector 5分钟从编译到跑通
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
在Windows上跑CREATE EXTENSION vector报"扩展不存在"?卡点基本都在pgvector这一步:官方安装包默认不带它,得自己编译一份。这条路径很短,下面先给你出结果,再谈选择和排错。
最短路径:5行命令拿到vector.dll
前提只有一条:VS装了C++编译工具、PostgreSQL是13+,然后以管理员身份打开x64 Native Tools Command Prompt,把这段跑完:
:: 拉源码、指定Postgres安装目录、编译并装入PG git clone https://gitcode.com/GitHub_Trending/pg/pgvector cd pgvector set "PGROOT=C:\Program Files\PostgreSQL\18" nmake /F Makefile.win nmake /F Makefile.win install⚠️ 装完的标志是vector.dll出现在PG的lib目录、.control和 SQL 脚本出现在share\extension,Makefile.win 的install目标会自动干完这几件事,不用你手动拷。
两种装法怎么选
不想碰编译器,就走预编译二进制:找版本和PG大版本都对得上的vector.dll,丢进lib,.control和--*.sql丢进share\extension。两条路的差别一张表说清:
| 方式 | 适合谁 | 代价 |
|---|---|---|
| 源码编译(nmake) | 要最新特性、想长期维护的开发者 | 一次性装VS的C++工具链 |
| 预编译二进制 | 只想先跑通、不碰编译器 | 版本必须严丝合缝,对不上只能退回编译 |
拿不准就选编译,它永远和你当前跑的PG版本对齐,后续升级也干净。
30秒验证扩展是否生效
用psql进目标库,两行确认装没装好:
-- 启用扩展并确认vector类型已注册 CREATE EXTENSION vector; SELECT NULL::vector;单独返回一个vector就是通了,顺手建个三维表打一发最近邻查询:
-- 建表插数,<-> 按L2距离取最近邻 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;nmake报错的4个排查点
这步卡住的人最多,遇到下面四种情况基本一眼定位:
- 报
Cannot open include file: 'postgres.h'→PGROOT指错了,改成实际安装路径 - 报
error C2196: case value '4' already used→ 命令行架构不对,换 x64 Native Tools,先nmake /F Makefile.win clean再重编 - 链接报
unresolved external symbol float_to_shortest_decimal_bufn→ Postgres 17.0~17.2 的已知问题,升到17.3+ - 安装时
Access is denied→ 没用管理员身份,重新开窗口再装
下一步
装好之后,就该给向量列建 HNSW 索引,数据量上来了查询才快。要调优的话就三件事:
- 数据量小:先建HNSW索引
- 内存富余:调大共享内存
- 表在变:定期VACUUM索引
【免费下载链接】pgvectorOpen-source vector similarity search for Postgres项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考