
tensorchord/pgvecto-rspgvecto.rs是一个PostgreSQL扩展,提供高效的向量相似度搜索功能,采用Rust编写并基于pgrx框架。该Docker镜像已预先集成PostgreSQL与pgvecto.rs扩展,可快速部署具备向量搜索能力的数据库服务,适用于需要处理高维向量数据的场景。
| 特性 | pgvecto.rs | pgvector |
|---|---|---|
| 过滤功能 | 引入VBASE方法,支持向量搜索与关系查询(如单向量TopK+过滤+连接) | 应用过滤时结果可能不完整(如原计划返回10条结果,过滤后可能仅5条) |
| 向量维度 | 支持最高65535维 | 支持最高2000维 |
| SIMD优化 | 运行时动态调度SIMD指令,基于硬件能力最大化性能 | 0.7.0版本起为Linux x86-64的距离函数添加CPU调度 |
| 数据类型 | 引入额外数据类型:二进制向量、FP16(16位浮点数)、INT8(8位整数) | - |
| 索引机制 | 索引的存储和内存管理独立于PostgreSQL | 依赖PostgreSQL原生存储引擎 |
| WAL支持 | 提供数据的预写日志(WAL)支持,索引WAL支持开发中 | 提供索引和数据的预写日志(WAL)支持 |
通过Docker快速启动pgvecto.rs服务:
bashdocker run \ --name pgvecto-rs-demo \ -e POSTGRES_PASSWORD=mysecretpassword \ -p 5432:5432 \ -d tensorchord/pgvecto-rs:pg16-v0.2.1
参数说明:
--name:容器名称-e POSTGRES_PASSWORD:设置PostgreSQL默认用户(postgres)密码-p 5432:5432:端口映射(主机端口:容器端口)-d:后台运行容器tensorchord/pgvecto-rs:pg16-v0.2.1:镜像名称(PostgreSQL 16版本,pgvecto-rs v0.2.1)使用psql客户端连接容器内数据库:
bashpsql -h localhost -p 5432 -U postgres
默认凭据:
postgresPOSTGRES_PASSWORD值(示例中为mysecretpassword)连接后执行以下SQL启用pgvecto.rs扩展:
sqlDROP EXTENSION IF EXISTS vectors; CREATE EXTENSION vectors;
使用vector(n)数据类型定义n维向量列:
sql-- 创建包含向量列的表 CREATE TABLE items ( id bigserial PRIMARY KEY, embedding vector(3) NOT NULL -- 3维向量 );
注意:
vector(n)仅在1 ≤ n ≤ 65535时有效。PostgreSQL允许创建vector类型(无维度限制)或维度不匹配的向量值,但此类情况下无法为该列创建索引。
支持通过向量字面量或数组转换插入数据:
sql-- 方法1:使用向量字面量 INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'); -- 方法2:通过数组转换 INSERT INTO items (embedding) VALUES (ARRAY[1, 2, 3]::real[]), (ARRAY[4, 5, 6]::real[]);
支持三种距离计算运算符:
<->:平方欧氏距离,定义为 Σ(x_i - y_i)²<#>:负点积,定义为 -Σx_i y_i<=>:余弦距离,定义为 1 - (Σx_i y_i) / (√Σx_i² √Σy_i²)示例:
sql-- 计算平方欧氏距离 SELECT '[1, 2, 3]'::vector <-> '[3, 2, 1]'::vector; -- 计算负点积 SELECT '[1, 2, 3]'::vector <#> '[3, 2, 1]'::vector; -- 计算余弦距离 SELECT '[1, 2, 3]'::vector <=> '[3, 2, 1]'::vector;
查询相似向量并按距离排序:
sql-- 查询与目标向量最相似的前5条记录 SELECT * FROM items ORDER BY embedding <-> '[3,2,1]' LIMIT 5;
使用vecf16类型(16位浮点数向量)减少内存占用:
sql-- 创建使用半精度浮点数向量的表 CREATE TABLE items_f16 ( id bigserial PRIMARY KEY, embedding vecf16(3) NOT NULL -- 3维16位浮点向量 );
完整使用指南请参考官方文档:
pgvecto.rs 官方文档




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务