做 RAG、语义检索或推荐时,要把 Embedding 向量 存起来、按相似度查,就得用向量数据库。Go 里常见的选择有三类:Pgvector(PostgreSQL 扩展)、MilvusQdrant。选哪个取决于你是否已有 Postgres、数据量和运维成本。这篇就聊这三者在 Go 里的客户端选型接入要点


  • Pgvector:是 PostgreSQL 的一个扩展,向量当一列存。适合本来就用 Postgres 的团队,不想多维护一个组件,数据量在百万级以内、QPS 不是特别夸张时很够用。Go 里用 pgx + pgvector-go 即可。
  • Milvus:独立向量库,支持大规模、分布式,适合向量数据量很大或要单独扩缩容的场景。官方有 milvus-sdk-go,接口偏「集合 + 列式插入 + 建索引再搜」。
  • Qdrant:也是独立向量库,API 设计偏 REST/gRPC,过滤条件(payload filter)和多向量支持比较顺手。Go 用 github.com/qdrant/go-client,文档和示例都比较全。

Pgvector:用 pgx + pgvector-go

前提:Postgres 已安装并启用 pgvector 扩展(CREATE EXTENSION vector)。Go 侧用 pgx 连库,用 pgvector-go 注册向量类型并读写。

核心流程:启用扩展 → 建表(vector(1536) 列)→ 注册向量类型 → 插入/查询(SQL + <->/<=>)。

适用场景:已有 Postgres、数据量不大、希望统一存储管理的团队。

Git 地址


Milvus:用官方 Go SDK

Milvus 需要先起服务(Docker 或集群),再用 milvus-sdk-go 连。概念是 Collection(类似表)、Field(含主键、向量列等),插入要按组织数据,查询前要建索引LoadCollection

核心流程:建 Collection → 列式 Insert → 建索引 → LoadCollection → Search。

适用场景:向量量大、要独立扩展的场景。

Git 地址


Qdrant:用 go-client

Qdrant 提供 go-client,支持 gRPC。概念是 CollectionPoint(id + vector + payload),插入用 Upsert,查询用 Search。

核心流程:创建 Collection → Upsert points → Search(可带 payload 过滤)。

适用场景:需要过滤、多向量、接口顺手的项目。

Git 地址


写在最后

  • Pgvector:Postgres 扩展,Go 用 pgx + pgvector-go,建表带 vector(N) 列,插入/查询用 SQL + <-> / <=>,适合已有 PG、数据量不大的场景。
  • Milvus:独立向量库,Go 用 milvus-sdk-go,流程是建 Collection → 列式 Insert → 建索引 → LoadCollection → Search,适合大规模、需独立扩展。
  • Qdrant:独立向量库,Go 用 go-client,CreateCollection → Upsert points → Search(可带 payload 过滤),适合检索条件多、接口顺手的场景。