news 2026/7/15 2:09:16

docker安装部署PostgreSQL带有pgvector扩展向量数据(高维数组)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
docker安装部署PostgreSQL带有pgvector扩展向量数据(高维数组)

1.拉取镜像

# 或者已经编译了x86的postgis、pgvector的18.1dockerpull registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres-with-gis:18.1# arrch64架构dockerpull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_postgres-with-gis:18.1

2.创建一个 postgres 容器并启动

dockerrun -d\--name postgres-gis\-ePOSTGRES_PASSWORD='Yo5WYypu0mCCheOU'\-p5432:5432\-v /data/postgres:/var/lib/postgresql\registry.cn-hangzhou.aliyuncs.com/qiluo-images/postgres-with-gis:18.1

3.执行PostGIS

create extension postgis;create extension postgis_topology;create extension fuzzystrmatch;create extension postgis_tiger_geocoder;create extension address_standardizer;

4.执行pgvector扩展向量

CREATE EXTENSION IF NOT EXISTS vector;

5.验证 PostGIS 安装:

# 在 PostgreSQL 命令行中执行SELECT PostGIS_Version();SELECT PostGIS_Full_Version();

6.验证 pgvector安装:

SELECT * FROM pg_extension WHERE extname='vector';

pgvector 扩展:向量数据库功能

什么是 pgvector?
pgvector 是一个 PostgreSQL 扩展,它让 PostgreSQL 能够存储、索引和查询向量数据(高维数组),主要用于:
核心功能
存储向量数据 - 存储多维浮点数数组
向量相似性搜索 - 查找最相似的向量
AI/ML 集成 - 与机器学习模型配合使用

主要用途

  1. AI 嵌入向量存储
-- 存储 OpenAI、BERT 等模型的文本嵌入 CREATE TABLE documents(idBIGSERIAL PRIMARY KEY, content TEXT, embedding VECTOR(1536), -- OpenAI 的维度 created_at TIMESTAMP);-- 插入向量数据 INSERT INTO documents(content, embedding)VALUES('这是一个文档','[0.1, 0.2, 0.3, ...]');
  1. 相似性搜索
-- 查找最相似的文档 SELECT id, content, embedding<=>'[0.1, 0.2, 0.3]'AS distance -- 余弦距离 FROM documents ORDER BY distance LIMIT10;
  1. 推荐系统
-- 基于向量相似性的产品推荐 CREATE TABLE products(idSERIAL PRIMARY KEY, name TEXT, features VECTOR(128), -- 产品特征向量 category TEXT);-- 查找相似产品 SELECT p2.name, p1.features<=>p2.features AS similarity FROM products p1 CROSS JOIN products p2 WHERE p1.id=123AND p2.id!=123ORDER BY similarity LIMIT5;
  1. 支持的距离度量
    pgvector 支持多种距离计算:
--1. 欧几里得距离(L2距离) SELECT embedding<->'[0.1, 0.2, 0.3]'FROM items;--2. 余弦距离(1 - 余弦相似度) SELECT embedding<=>'[0.1, 0.2, 0.3]'FROM items;--3. 内积距离 SELECT embedding<#> '[0.1, 0.2, 0.3]' FROM items;
  1. 索引类型
    IVFFlat 索引(推荐)
-- 创建 IVFFlat 索引(适合大规模数据) CREATE INDEX ON items USING ivfflat(embedding vector_cosine_ops)WITH(lists=100);-- 聚类数量 -- 用于不同距离度量 USING ivfflat(embedding vector_l2_ops)-- 欧几里得距离 USING ivfflat(embedding vector_cosine_ops)-- 余弦距离 USING ivfflat(embedding vector_ip_ops)-- 内积距离
  1. HNSW 索引(更精确,稍慢)
-- 创建 HNSW 索引(精度更高) CREATE INDEX ON items USING hnsw(embedding vector_cosine_ops)WITH(m=16, ef_construction=64);

实际应用场景

场景 1:语义搜索

# Python 示例:结合 OpenAI 嵌入importopenaiimportpsycopg2frompgvector.psycopg2importregister_vector# 生成文本嵌入response=openai.Embedding.create(model="text-embedding-ada-002",input="如何学习 PostgreSQL")embedding=response['data'][0]['embedding']# 存储到 PostgreSQLconn=psycopg2.connect("dbname=test user=postgres")register_vector(conn)cur=conn.cursor()cur.execute("INSERT INTO documents (content, embedding) VALUES (%s, %s)",("如何学习 PostgreSQL",embedding))# 语义搜索search_query="PostgreSQL 教程"search_embedding=get_embedding(search_query)# 获取查询的嵌入cur.execute(""" SELECT content, embedding <=> %s AS distance FROM documents ORDER BY distance LIMIT 5 """,(search_embedding,))场景2:图像相似性搜索 sql--存储图像特征向量 CREATE TABLE images(idSERIAL PRIMARY KEY,image_path TEXT,features VECTOR(512),--ResNet/VGG 等模型提取的特征 tags TEXT[]);--查找相似图像 SELECT image_path,tags,features<=>(SELECT features FROM images WHEREid=123)AS similarity FROM images WHEREid!=123ORDER BY similarity LIMIT10;

场景 3:用户画像匹配

-- 基于用户行为向量的推荐 CREATE TABLE user_profiles(user_id INT PRIMARY KEY, behavior_vector VECTOR(256), -- 用户行为向量 preferences JSONB);-- 查找相似用户(用于协同过滤) SELECT u2.user_id, u1.behavior_vector<=>u2.behavior_vector AS similarity FROM user_profiles u1 JOIN user_profiles u2 ON u1.user_id!=u2.user_id WHERE u1.user_id=1001ORDER BY similarity LIMIT10;

性能优化技巧

--1. 设置合适的索引参数 CREATE INDEX ON items USING ivfflat(embedding vector_cosine_ops)WITH(lists=1000);-- 对于大数据集增加 lists 值 --2. 使用分区表 CREATE TABLE embeddings_partitioned(idBIGINT, embedding VECTOR(1536), created_date DATE)PARTITION BY RANGE(created_date);--3. 调整搜索参数 SET ivfflat.probes=10;-- 增加以提高准确性(默认1) SET hnsw.ef_search=100;-- HNSW 搜索参数 与其他工具的集成 与 LangChain 集成 - 用于 AI 应用 与 OpenAI API 集成 - 存储和查询嵌入 与 Hugging Face 集成 - 使用开源模型 与 MLflow 集成 - 模型特征存储

优势

无需额外基础设施 - 直接在 PostgreSQL 中使用
ACID 保证 - 完整的数据库事务支持
SQL 接口 - 使用熟悉的 SQL 语法
与其他数据一起查询 - 向量 + 结构化数据联合查询
开源免费 - MIT 许可证

简单总结

pgvector = PostgreSQL + 向量数据库能力
把 PostgreSQL 变成了一个既能处理传统关系型数据,又能处理 AI 向量数据的多模数据库。特别适合需要同时处理结构化数据和 AI 嵌入的应用场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 21:58:09

【大数据毕设源码分享】基于springboot+Hadoop的手机销售数据分析系统(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/12 7:40:18

基于stm32单片机的智能家居控制系统

目录硬件组成软件设计功能实现应用场景开发资源源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;硬件组成 STM32单片机作为核心控制器&#xff0c;通常选用STM32F103或STM32F407系列&#xff0c;具备丰富的外设接口和低功耗特性。传感器…

作者头像 李华
网站建设 2026/7/3 1:38:45

人群仿真软件:Legion_(14).Legion在城市规划中的应用

Legion在城市规划中的应用 在城市规划中&#xff0c;人群仿真软件Legion可以发挥重要作用&#xff0c;帮助规划师和决策者更好地理解城市空间的使用情况&#xff0c;优化交通流线&#xff0c;提高安全性和舒适性。本节将详细介绍Legion在城市规划中的具体应用&#xff0c;包括如…

作者头像 李华
网站建设 2026/7/5 10:13:41

全网最全自考必备TOP8 AI论文软件测评

全网最全自考必备TOP8 AI论文软件测评 2026年自考AI论文工具测评&#xff1a;为何需要这份全面榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;越来越多的自考生开始借助AI论文软件提升写作效率、优化内容质量。然而&#xff0c;市面上的工具种类繁多&#xff0c;功…

作者头像 李华
网站建设 2026/7/15 1:38:28

人群仿真软件:Legion_(11).Legion与其他软件的集成

Legion与其他软件的集成 在人群仿真项目中&#xff0c;Legion软件通常需要与其他软件和系统集成以实现更全面的仿真分析和数据处理。本节将详细介绍如何将Legion与其他常用软件和系统进行集成&#xff0c;包括数据导入导出、与其他仿真软件的联动、以及如何利用外部API和SDK进…

作者头像 李华
网站建设 2026/7/3 1:38:40

代码跑得慢?让Spring的StopWatch告诉你真相!

一、代码中到底哪个环节出了问题&#xff1f; 程序员的一天&#xff0c;经常在两种状态间切换&#xff1a; 状态A&#xff1a;&#xff08;自信满满&#xff09;“我这个方法优化过了&#xff0c;绝对飞快&#xff01;” 状态B&#xff1a;&#xff08;用户反馈后&#xff0…

作者头像 李华