入门指南

更新时间:2025-04-22 06:36:35

本文介绍向量数据库基础使用方法。

说明

PGVector向量插件存在内核小版本限制您可在控制台查看内核小版本号,也可以通过SHOW polardb_version;语句查看。如未满足内核小版本要求,请升级内核小版本

创建插件和向量表

使用高权限账号在目标数据库创建插件。

说明

PGVector插件的作用域是Database级别,如果需要在集群的多个Database中使用向量能力,请为每个Database分别创建向量插件。

CREATE EXTENSION IF NOT EXISTS vector;

创建插件成功后,您可执行以下语句创建向量表。

  1. 创建一个具有3个维度的向量表。

    CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
  2. 插入向量。

    INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
  3. 按欧几里得距离(L2)获取最近邻。

    SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

    还支持内积 (<#>)、余弦距离 (<=>) 和L1距离 (<+>)。

    说明

    <#>返回负的内积,因为PostgreSQL仅支持对操作符进行升序索引扫描。

存储

  1. 创建一个具有3个维度的向量表。

    CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
    说明

    您也可以为现有表增加向量列ALTER TABLE items ADD COLUMN embedding vector(3);

  2. 插入向量。

    • 基础向量插入。

      INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
    • 使用COPY批量加载向量

      COPY items (embedding) FROM STDIN WITH (FORMAT BINARY);
    • 插入向量,同时处理潜在的冲突(例如,主键冲突)。

      INSERT INTO items (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
          ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;

      此时如果新插入数据与现有数据存在主键冲突,则更新现有行的embedding列为新值,从而确保数据唯一性。

  3. 更新向量。

    UPDATE items SET embedding = '[1,2,3]' WHERE id = 1;
  4. 删除向量。

    DELETE FROM items WHERE id = 1;

查询

距离

获取与某个向量最近邻。

SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

支持的距离函数包括:

  • <->:欧几里得距离(L2)。

  • <#>:内积距离(inner product)。

  • <=>:余弦距离(cosine)。

  • <+>:曼哈顿距离(L1)。

  • <~>:汉明距离(Hamming)(二进制向量)。

  • <%>:Jaccard距离(二进制向量)。

示例

说明

在使用索引时,建议结合ORDER BYLIMIT

  • 获取与某一行的5个最近邻并排序。

    SELECT * FROM items WHERE id != 1 ORDER BY embedding <-> (SELECT embedding FROM items WHERE id = 1) LIMIT 5;
  • 获取在特定距离范围内的行。

    SELECT * FROM items WHERE embedding <-> '[3,1,2]' < 5;
  • 获取距离。

    SELECT embedding <-> '[3,1,2]' AS distance FROM items;
  • 获取内积距离。

    说明

    由于<#>返回负的内积,乘以-1

    SELECT (embedding <#> '[3,1,2]') * -1 AS inner_product FROM items;
  • 获取余弦距离,此处使用1-余弦距离值。

    SELECT 1 - (embedding <=> '[3,1,2]') AS cosine_similarity FROM items;

聚合

  • 平均向量。

    SELECT AVG(embedding) FROM items;
  • 按组平均向量。

    SELECT id, AVG(embedding) FROM items GROUP BY id;

  • 本页导读
  • 创建插件和向量表
  • 存储
  • 查询
  • 距离
  • 聚合