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

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

ローカル環境にDockerfileを作り、そこでpgvectorをインストールするのが良さそう。
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

今度こそ指定したバージョンのpgvectorをインストールすることができた。
ALTER EXTENSION vector UPDATE TO '0.5.0';
version "0.5.0" of extension "vector" is already installed

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

テーブル作成
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));

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

[3,1,2]
との距離(L2 distance なので、2点間のユークリッド距離だと思う)
SELECT *, embedding <-> '[3,1,2]' as l2_distance 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;
コサイン距離 <=>
SELECT *, embedding <=> '[3,1,2]' as inner_product FROM items ORDER BY embedding <=> '[3,1,2]' LIMIT 5;
このスクラップは2025/01/28にクローズされました