it编程 > 数据库 > MsSqlserver

PostgreSQL向量检索之pgvector入门实战指南

8人参与 2026-01-31 MsSqlserver

一. 什么是 pgvector?

pgvector 是 postgresql 的开源扩展,用于在数据库中存储和处理向量数据,特别是高维嵌入向量(embedding)。

功能与特点

  1. 向量存储:可将向量数据直接存入表中。
  2. 距离计算:支持 l2(欧氏距离)、inner product(内积)、cosine(余弦相似度)等。
  3. 最近邻搜索:支持精确搜索和近似搜索(ivfflat / hnsw)。
  4. 兼容 sql:可以直接与表中的其他列一起做查询、过滤和排序。
  5. 可扩展性:适合中小规模向量存储,也能应对大数据量场景。

二. 为什么选择 postgresql + pgvector?

  1. 数据整合:向量与原始数据存放在同一数据库,无需单独部署向量数据库。
  2. 事务和安全:继承 postgresql 的事务、权限控制、备份与复制机制。
  3. 易于扩展:可以直接使用 sql 做 join、过滤条件,实现混合检索。
  4. 降低维护成本:只需要维护一个数据库系统,减少运维复杂度。
  5. 可视化和监控:可以使用 postgresql 现有工具进行监控和分析。

三. 安装与启用

  1. 确保 postgresql 支持扩展(通常 postgresql 13+)
  2. 安装 pgvector

启用扩展:

create extension if not exists vector;

验证安装:

select * from pg_extension where extname='vector';

成功后即可在表中创建向量列。

四. 基本数据结构

create table documents (
    id bigserial primary key,
    embedding vector(3) -- 假设嵌入向量是 3 维
);

小贴士:向量列的维度必须固定,查询和索引时保持一致。

五. 基本操作

5.1 插入向量

insert into documents (embedding) values ('[1,2,3]'), ('[4,5,6]'),('[4,0,5]');

5.2 查询向量最近邻

-- 使用 l2 距离
select id,embedding <-> '[1,2,3]' as score,embedding from documents order by embedding <-> '[1,2,3]' limit 5;

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

5.3 常用距离运算符

操作符相似度度量说明推荐场景值越小代表
<->欧氏距离 (l2 distance)计算两个向量之间的几何距离图像、音频、地理数据检索越相似
<#>负内积 (- inner product)取负号后的内积,用于最大内积搜索推荐系统、模型打分越相似
<=>余弦距离 (cosine distance)1 - 余弦相似度,对向量长度不敏感文本语义检索、跨语言向量匹配越相似

后面会出一篇关于这些运算符计算使用的文章

5.4 其他操作

# 向现有表中添加向量列
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;

六. python 示例

使用 pgvector-pythonpsycopg2 处理向量:

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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

PostgresSQL安装教程及初始使用操作方法

01-31

SQL中的UNION ALL和UNION 区别及如何使用

01-31

SQL Server删除重复数据的核心方案

01-31

PostgreSQL索引的设计原则和最佳实践

01-27

KingbaseES金仓数据库:ksql 命令行从建表到删表实战(含增删改查)

01-31

使用Nginx和内网穿透实现多个本地Web站点的公网访问过程

01-31

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论