Closed22

Local on Docker の Postgresql に pgvector 拡張を追加する

bisquebisque

Google Cloud の Postgresql on Cloud SQL では pgvector 拡張が使えるということなので、まずはローカルの Postgresql で最近傍探索を試してみる。

Hidden comment
bisquebisque

ローカル環境にDockerfileを作り、そこでpgvectorをインストールするのが良さそう。

Dockerfileの参考
https://github.com/pgvector/pgvector/blob/master/Dockerfile

作ったファイル

# Postgres 14 をベースにしたイメージ
ARG PG_MAJOR=14
FROM postgres:$PG_MAJOR

ARG PG_VECTOR_VERSION=v0.5.0

# pgvector をビルドするために必要なパッケージをインストール
RUN apt-get update && \
  apt-get install -y --no-install-recommends \
  git \
  ca-certificates \
  build-essential \
  postgresql-server-dev-$PG_MAJOR \
  && rm -rf /var/lib/apt/lists/*

# pgvectorソースをダウンロードしてビルド・インストール
RUN git clone --branch $PG_VECTOR_VERSION --depth 1 \
  https://github.com/pgvector/pgvector.git /tmp/pgvector \
  && cd /tmp/pgvector \
  && make \
  && make install \
  && rm -rf /tmp/pgvector
bisquebisque

今度こそ指定したバージョンのpgvectorをインストールすることができた。

ALTER EXTENSION vector UPDATE TO '0.5.0';
version "0.5.0" of extension "vector" is already installed
bisquebisque

pgvectorのGetting Startedをかるくなぞってみる。

https://github.com/pgvector/pgvector?tab=readme-ov-file#getting-started

bisquebisque

テーブル作成

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

bisquebisque

値のINSERT

INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');

bisquebisque

[3,1,2] との距離(L2 distance なので、2点間のユークリッド距離だと思う)

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

bisquebisque

内積 <#>

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

コサイン距離 <=>

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

このスクラップは2025/01/28にクローズされました