8人参与 • 2026-01-31 • MsSqlserver
pgvector 是 postgresql 的开源扩展,用于在数据库中存储和处理向量数据,特别是高维嵌入向量(embedding)。
功能与特点
启用扩展:
create extension if not exists vector;
验证安装:
select * from pg_extension where extname='vector';
成功后即可在表中创建向量列。

vector 或 vector(n),其中 n 是向量维度。create table documents (
id bigserial primary key,
embedding vector(3) -- 假设嵌入向量是 3 维
);
小贴士:向量列的维度必须固定,查询和索引时保持一致。
insert into documents (embedding) values ('[1,2,3]'), ('[4,5,6]'),('[4,0,5]');
-- 使用 l2 距离 select id,embedding <-> '[1,2,3]' as score,embedding from documents order by embedding <-> '[1,2,3]' limit 5;

根据score的得分,就能查询出相近的向量,值越小代表越相似,算法如下
公式

| 操作符 | 相似度度量 | 说明 | 推荐场景 | 值越小代表 |
|---|---|---|---|---|
<-> | 欧氏距离 (l2 distance) | 计算两个向量之间的几何距离 | 图像、音频、地理数据检索 | 越相似 |
<#> | 负内积 (- inner product) | 取负号后的内积,用于最大内积搜索 | 推荐系统、模型打分 | 越相似 |
<=> | 余弦距离 (cosine distance) | 1 - 余弦相似度,对向量长度不敏感 | 文本语义检索、跨语言向量匹配 | 越相似 |
后面会出一篇关于这些运算符计算使用的文章
# 向现有表中添加向量列 alter table items add column embedding vector(3); # 更新向量 update items set embedding = '[1,2,3]' where id = 1; # 删除向量 update items set embedding = '[1,2,3]' where id = 1;
使用 pgvector-python 或 psycopg2 处理向量:
import numpy as np
import psycopg2
from pgvector.psycopg2 import register_vector
# 连接数据库
conn = psycopg2.connect(host='192.168.1.101', dbname='test-agent', user='postgres', password='123456', port=5433)
register_vector(conn) # 注册 vector 类型
cur = conn.cursor()
# 插入示例向量
embedding = np.random.rand(3).astype('float32')
print(embedding)
cur.execute(
"insert into documents (embedding) values (%s)",
(embedding,) # 注意这里的逗号,确保是元组格式
)
conn.commit()
# 查询最近邻
query_embedding = np.random.rand(3).astype('float32')
print(query_embedding)
cur.execute(
"select id, embedding,embedding <-> %s as score from documents order by embedding <-> %s limit 5",
(query_embedding, query_embedding,)
)
rows = cur.fetchall()
for r in rows:
print(r)
cur.close()
conn.close()
到此这篇关于postgresql向量检索之pgvector入门实战指南的文章就介绍到这了,更多相关postgresql向量检索pgvector内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论