深入解析:PostgreSQL向量检索:pgvector入门指南

news/2025/10/4 19:52:54/文章来源:https://www.cnblogs.com/yxysuanfa/p/19125864

PostgreSQL向量检索:pgvector入门指南

    • 一. 什么是 pgvector?
    • 二. 为什么选择 PostgreSQL + pgvector?
    • 三. 安装与启用
    • 四. 基本数据结构
    • 五. 基本操作
      • 5.1 插入向量
      • 5.2 查询向量最近邻
      • 5.3 常用距离运算符
      • 5.4 其他操作
    • 六. Python 示例
    • 七. 小结

前言
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。

作者:神的孩子都在歌唱

一. 什么是 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';

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

在这里插入图片描述

四. 基本数据结构

  • 向量列类型:vectorvector(n),其中 n 是向量维度。
  • 示例表结构:
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的得分,就能查询出相近的向量,值越小代表越相似,算法如下
公式

d(q,v)=∑i=1n(qi−vi)2d(q, v) = \sqrt{\sum_{i=1}^{n} (q_i - v_i)^2} d(q,v)=i=1n(qivi)2

计算例子

假设查询向量 (q = [1,2,3]),表中某行向量 (v = [4,0,5]):
d(q,v)=(1−4)2+(2−0)2+(3−5)2=9+4+4=17≈4.123d(q, v) = \sqrt{(1-4)^2 + (2-0)^2 + (3-5)^2} = \sqrt{9 + 4 + 4} = \sqrt{17} \approx 4.123 d(q,v)=(14)2+(20)2+(35)2=9+4+4=174.123

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()

在这里插入图片描述

七. 小结

  • pgvector 是 PostgreSQL 的向量扩展,支持高维嵌入向量存储与检索。
  • 提供精确与近似最近邻查询,并可与 SQL 完美结合。
  • 基础操作包括创建表、插入向量、查询最近邻以及选择合适的距离运算符。

作者:神的孩子都在歌唱

本人博客:https://blog.csdn.net/weixin_46654114

转载说明:务必注明来源,附带本人博客连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网贷之家网站建设你访问的网站正在建设

以上问题在编译器中出现可以在编译器中最上面加入&#xff1a; #define_CRT_SECURE_NO_WARNINGS 或者将scanf修改为scanf_s 一定要在最上端&#xff01;&#xff01;&#xff01;最上端&#xff01;&#xff01;&#xff01;最上端加入&#xff01;&#xff01;&#xff01; 虽…

Allow or block media autoplay in Firefox

https://support.mozilla.org/en-US/kb/block-autoplay

寺庙网站开发文案wordpress免费主题插件下载

前文&#xff1a;最近跟着DataWhale组队学习这一期“Sora原理与技术实战”&#xff0c;本篇博客主要是基于DataWhale成员、厦门大学平潭研究院杨知铮研究员分享的Sora技术原理详解课件内容以及参考网上一些博客资料整理而来&#xff08;详见文末参考文献&#xff09;&#xff0…

[WC2018] 即时战略

[WC2018] 即时战略分享一下全局平衡二叉树的做法。 先讲下部分分。 \(n\le 100,T\le 10000\) 从 \(1\) 开始 DFS,对于当前 \(u\),枚举点 \(v\),如果 \(\text{explore}(u,v)\) 不为 \(fa_u\),则 \(v\) 为 \(u\) 子结…

商城网站源码大全微网站建站

怎么解决java导出excel时文件名乱码发布时间&#xff1a;2020-06-19 16:59:00来源&#xff1a;亿速云阅读&#xff1a;137作者&#xff1a;元一java解决导出Excel时文件名乱码的方法示例&#xff1a;String agent request.getHeader("USER-AGENT").toLowerCase();re…

实用指南:Unity学习之C#的反射机制

实用指南:Unity学习之C#的反射机制pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

电子政务网站建设参考文献wdcp 网站打不开

一金融机构在近期发生了一起数据泄露事件。 经过调查&#xff0c;发现是由于一名员工将包含客户敏感信息的文件通过电子邮件发送给了未经授权的第三方。 这一事件导致客户数据泄露&#xff0c;给该机构带来了严重的声誉损失和信任危机。 这一案例凸显了数据防泄漏系统的重要性…

网站开发 数据库深圳制作网站

1、背景介绍 重装win10系统&#xff0c;重装Python。在坑出现之前&#xff0c;已经完成了Python的安装&#xff08;D盘&#xff09;&#xff0c;并且在系统中添加了环境变量。由于平时需要用到Python2.7和Python3.6&#xff0c;这里将对应的解释器分别改名为Python2和Python3。…

HDF5文件 ——之三

H5G、H5L、H5O 是 HDF5 C API 的分组接口,在 HDF.PInvoke.NETStandard(C# 的 HDF5 封装包)里,它们分别代表 HDF5 底层 对象层(Object layer)、组层(Group layer) 和 链接层(Link layer) 的操作模块。🧱 一…

MySQL库的操作(ubuntu) - 教程

MySQL库的操作(ubuntu) - 教程2025-10-04 19:34 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

创业做社交网站有哪些做一个网站 多少钱

1&#xff09;熟悉之前的SysUser登录流程 过滤器链验证配置 这里security过滤器链增加了前置过滤器链jwtFilter 该过滤器为我们自定义的&#xff0c;每次请求都会经过jwt验证 ok我们按ctrl alt B跳转过去来看下 首先会获取登录用户LoginUser 内部通过header键&#xff0c;获…

代码随想录算法训练营|Day 25

Day 25 第七章 回溯算法 part04 491.递增子序列 本题和大家刚做过的 90.子集II 非常像,但又很不一样,很容易掉坑里。 https://programmercarl.com/0491.递增子序列.html 视频讲解:https://www.bilibili.com/video/B…

深入解析:SAE J3072-2024插电式电动汽车(PEV)中的车载逆变器系统安全标准介绍

深入解析:SAE J3072-2024插电式电动汽车(PEV)中的车载逆变器系统安全标准介绍pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-…

冷僻模板整理

min25筛 可以低于线性的解决1到N中的质数的k次幂的求和的问题,并且在处理了N之后对于1到N中数论分块所需的点x(l,r)都可以通过val=g[ID(x)]以O(1)的代价获取到 如果不需要多次查询,建议把命名空间外的定义放到m…

参考文献网站开发电商网站平台有哪些功能

1、Lambda表达式 Lambda表达式是Java8的新特性。 组成Lambda表达式的三个要素&#xff1a;形式参数&#xff0c;箭头操作符&#xff0c;代码块 Lambda表达式的格式&#xff1a;(形式参数) -> {代码块} //如&#xff1a;(int a, int b) -> {return a b;}形式参数&…

深入解析:精读C++20设计模式——行为型设计模式:命令模式

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Apache Beam入门教程:统一批流处理模型 - 教程

Apache Beam入门教程:统一批流处理模型 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

详细介绍:关于[汉芝电子低调获取证书,及生产各类加密产品]这档事

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

中国建设银行网站首页joy怎样添加字体到wordpress

目录 ★ 工作队列介绍代码演示测试注意点1&#xff1a;注意点2&#xff1a; ★ 工作队列介绍 工作队列&#xff1a; 就是让多个消费者竞争消费同一个消息队列的消息&#xff0c;相当于多个消费者共享消息队列。 ▲ RabbitMQ可以让多个消费者竞争消费同一个消息队列 ▲ 消息队…

华梦服饰网站建设中wordpress临时关闭站点

&#xff08;四&#xff09;无人机技术 1.无人作战飞机1.1 美国空军披露可与下一代战斗机编组作战的协同式无人作战飞机项目1.2 俄罗斯无人作战飞机取得重要进展 2.支援保障无人机2.1 欧洲无人机项目通过首个里程碑2.2 美国海军继续开展MQ-25无人加油机测试工作 3.微小型无人机…