pgvectorとは|PostgreSQLでベクトル検索を実装する仕組みと導入手順
最終更新日:2026/08/06
pgvectorとは、PostgreSQLにベクトル型と類似度検索を追加するオープンソースの拡張機能です。生成AI・RAGでの類似文書検索を、既存のPostgreSQL運用にそのまま同居させたい方向けに、仕組み・導入手順・インデックス選定・案件視点までを一気通貫で整理します。専用ベクトルDBとの使い分け判断まで持ち帰れます。
先に結論
pgvectorは、PostgreSQLにvector型・距離演算子・専用インデックスを追加する拡張機能。既存DBを増設せず類似度検索を実装できる
距離計算はL2距離・内積・コサイン距離の3種類。テキスト埋め込みではコサイン距離が選ばれやすい傾向
インデックスはIVFFlat(軽量・学習コスト小)とHNSW(高精度・メモリ多め)の2択。一般的なテキスト埋め込みRAG用途では、数万件規模ならIVFFlat、数十万件以上や精度重視ならHNSWが有力な選択肢
生成AI/RAG案件で「専用ベクトルDBを増やしたくない」ケースの第一候補。埋め込みの生成やアプリ側実装はLangChain・LlamaIndexで橋渡しできる
大規模・低レイテンシ要件ではPineconeやWeaviate・Qdrant等の専用製品と使い分ける
この記事でわかること
pgvectorが何を追加し、なぜPostgreSQLの上でベクトル検索が成立するのか
インストールから最初のクエリまでの手順の全体像
IVFFlatとHNSWの違いと選び方
RAG構築でどこにpgvectorを組み込むか
フリーランスエンジニア案件でpgvectorスキルがどう評価されるか
目次
pgvectorとは何か|PostgreSQL拡張の位置づけ
なぜPostgreSQL上でベクトル検索するのか
pgvectorのインストールと基本セットアップ
インデックス選定|IVFFlatとHNSWの違い
RAG構築でpgvectorを使う実装イメージ
パフォーマンスチューニングと運用上の注意
フリーランス視点|pgvectorスキルは案件でどう評価されるか
よくある失敗と対策
独自比較|pgvectorが向かない5つのシグナル
まとめ
よくある質問
pgvectorとは何か|PostgreSQL拡張の位置づけ
pgvectorは、PostgreSQLに以下の3つを追加する拡張機能です。既存のPostgreSQLに拡張登録コマンドを1回発行するだけで導入でき、追加のミドルウェアは不要です。
vector型:任意次元の実数配列を保存するデータ型
距離演算子:L2距離・内積・コサイン類似度の3種類
専用インデックス:IVFFlatとHNSWの2種類
つまり、埋め込みベクトルを普通のカラムのように保存し、通常のSQL問い合わせで近傍検索できるようになります。RDBのトランザクション・テーブル結合・権限管理・バックアップ運用の資産をそのまま活かしたまま、ベクトル検索という新しい問い合わせパターンを追加できるのがpgvectorの立ち位置です。
何ができて、何ができないのか
pgvectorが担う範囲は限定的です。埋め込みそのものは生成しません。OpenAIやCohereなどの埋め込みモデル、あるいはローカルの埋め込みモデルで生成した数値配列を、pgvectorが保存・検索する構図です。埋め込みモデルの呼び出しはOpenAI APIやOllamaのローカル実行などアプリ側の責務になります。
PostgreSQL本体との関係
pgvectorはあくまで拡張機能で、単体では動きません。裏側はPostgreSQLそのものです。マネージドサービスで使う場合は、そのサービスがpgvectorに対応しているかどうかがまず論点になります。AWS RDS for PostgreSQL・Aurora PostgreSQL・Google Cloud SQL・Supabase・Neonなどで利用できるケースがありますが、実際の対応可否はサービス種別・PostgreSQLバージョン・リージョン・プランで変わります。利用中の環境のドキュメントで必ず確認してください。AWS RDSの運用に慣れているチームなら、対応バージョンを選べば既存資産の延長で導入できます。
なぜ今pgvectorなのか
生成AI・RAGの実装が実務に降りてきた結果、「文書やユーザークエリを埋め込みに変換し、近い文書をk件返す」という処理が汎用要件になりました。ここで専用ベクトルDBを別建てするか、既存のPostgreSQLに同居させるかが選択になります。pgvectorは後者の入り口で、既存の権限・バックアップ・監査運用にそのまま乗るのが強みです。
なぜPostgreSQL上でベクトル検索するのか
専用ベクトルDBではなくpgvectorを選ぶ判断軸を整理します。原則、既存PostgreSQL資産がある中規模までの実装で価値が出ます。
判断軸 | pgvectorが向くケース | 専用ベクトルDBが向くケース |
|---|---|---|
データ規模 | 数万〜数百万件程度 | 数千万〜億単位 |
運用体制 | 既にPostgreSQL運用が回っている | 検索専用の別基盤を持てる |
メタデータ結合 | 権限・カテゴリ・日付で結合検索したい | 検索と業務データが分離していてよい |
コスト | DB1本で完結させたい | 検索専用の予算を確保できる |
レイテンシ要件 | 数十msに収まればよい | 一桁ms・高QPSが必須 |
ケース別の判断:社内文書のRAGや、既存アプリへの類似検索追加のように「業務DBの隣にベクトル検索を置きたい」用途はpgvector優位。ECサイト全商品の画像類似検索やチャットアプリの巨大コーパスなど、専用インフラを組む前提の案件は専用ベクトルDBが優位です。
ミニFAQ
Q. MySQLでも同じことはできますか。
A. MySQL系でもベクトル検索機能の整備が進んでいますが、pgvectorほどインデックスの選択肢や実装事例が広く共有されているとは限りません。MySQLとPostgreSQLの違いを踏まえ、ベクトル検索を主用途に据えるなら、実務ではPostgreSQL+pgvectorが選ばれやすい傾向です。最新の対応状況は各DBの公式ドキュメントで確認してください。
pgvectorのインストールと基本セットアップ
導入は非常に軽量です。以下の流れで最初のクエリまで到達します。SQLコマンドの詳細は公式リポジトリ(GitHub)を参照してください。
インストール手順の全体像
拡張のインストール:セルフホスト環境ではソースからビルド、または各種パッケージマネージャから導入します。マネージドサービス(RDS・Supabase・Neon等)ではデフォルトでpgvectorが利用可能なケースが多く、追加ビルドは不要です
拡張の有効化:対象データベースで拡張登録コマンド(vector)を1回発行します
カラム定義:vector型(次元数を指定)のカラムを追加します。OpenAIのtext-embedding-3-smallなら1536次元、多言語系ならモデルごとの次元にそろえます
データ挿入:埋め込みモデルの出力(浮動小数点数の配列)を通常の挿入文で登録します
検索クエリ:距離演算子でソートしてk件のトップ近傍を取り出します
距離演算子と距離関数
pgvectorが提供する演算子は次の3つです。用途で使い分けます。用語は「類似度」ではなく「距離」で統一します(距離は小さいほど近い)。
演算子 | 距離の意味 | 主な用途 |
|---|---|---|
<-> | L2距離(ユークリッド距離) | 座標・画像特徴量など連続量 |
<#> | 内積(負値を返す点に注意) | 内積で類似度を定義するモデル |
<=> | コサイン距離 | テキスト埋め込みの類似検索 |
結論:テキスト埋め込みを扱うRAG用途では、実務でコサイン距離(<=>)が選ばれるケースが多い傾向です。ただし埋め込みモデルが正規化前提や内積前提の設計の場合はモデル側の慣習に合わせます。
ミニFAQ
Q. 次元数はあとから変更できますか。
A. vector(N) は列定義時に次元数を固定するため、埋め込みモデルを変更したときは新しい列を追加して段階的に切り替える運用が現実的です。モデル差し替えは影響範囲が大きいので、初回設計時にモデル選定を確定させておくと後戻りが少なく済みます。
インデックス選定|IVFFlatとHNSWの違い
pgvectorが提供する近似最近傍探索(ANN)のインデックスは2種類です。件数と要件で決めます。
IVFFlat(Inverted File Flat)
仕組み:全ベクトルをk個のクラスタに事前分割し、クエリ時は近いクラスタだけ探索する
学習が必要:既にデータが入っている状態でインデックスを構築する必要がある。十分なデータ投入前に作成すると、期待した検索精度が出にくくなる
チューニング項目:lists(クラスタ数)、probes(探索するクラスタ数)
向く規模:数万〜数十万件
HNSW(Hierarchical Navigable Small World)
仕組み:ベクトルをグラフで結び、多層構造で近傍を高速に辿る
学習不要:空テーブルにも先にインデックスを作れる
チューニング項目:m(各ノードのリンク数)、ef_construction(構築時の探索幅)、ef_search(検索時の探索幅)
向く規模:数十万〜数百万件、高精度・低レイテンシ要件
使い分けの目安
以下は、一般的なテキスト埋め込みを使うRAG用途での大まかな目安です。実際は次元数・更新頻度・許容再現率・メモリ・QPS・フィルタ条件で変わります。
条件 | 推奨 | 補足 |
|---|---|---|
数万件以下・とりあえず動かす | IVFFlat | 構築が速く、まず動かす検証に向く |
数十万〜数百万件・精度重視 | HNSW | 精度は上がるがメモリ使用量が大きい |
データが継続的に追加される | HNSW | インデックス再構築の頻度を下げやすい |
メモリを節約したい | IVFFlat | HNSWはメモリを消費する |
ケース別の判断:PoC段階や小規模なら迷わずIVFFlat。本番の類似検索基盤として使うなら、多くのケースでHNSWを選ぶ判断が実務では増えています。ただしメモリ・構築時間のコストが増えるため、インデックス方針は本番投入前にベンチマークで確認するのが安全です。
ミニFAQ
Q. インデックスなしでも検索できますか。
A. できます。距離でソートする全件走査は動きますが、件数が数万を超えると急激に遅くなります。数千件程度のPoCならインデックスなしで進め、本番規模ではIVFFlatかHNSWを必ず入れるのが原則です。
RAG構築でpgvectorを使う実装イメージ
pgvectorはRAG(Retrieval-Augmented Generation)のRetrieval部分を担います。フローとしては次の順序です。
文書の前処理:PDFや社内文書をチャンク分割する(500〜1000文字程度が目安)
埋め込み生成:OpenAI・Cohere・ローカルモデル等で各チャンクをベクトル化
PostgreSQLに保存:チャンクの本文・メタデータ・埋め込みを同じ行に格納
クエリ側の埋め込み:ユーザー質問も同じモデルで埋め込みに変換
類似検索:pgvectorのコサイン距離でトップk件を取得
LLMへの投入:取得したチャンクをプロンプトのコンテキストとして渡す
フレームワークとの組み合わせ
アプリ側の実装は、フレームワークを使うと薄く済みます。
LangChain:PGVectorという専用ベクトルストア実装が提供されており、埋め込み生成〜検索を薄いラッパで扱える
LlamaIndex:ドキュメント指向のRAG構築に強い。PostgresVectorStoreでpgvectorを利用できる
LangGraph:エージェントワークフローの中で、pgvector経由の検索をノードの1つとして組み込める
メタデータフィルタとの組み合わせが強み
pgvectorのRAG実装での実務的な強みは、普通のSQLでフィルタとテーブル結合が書ける点です。「社内文書のうち、権限がある部署の、直近3か月の、類似上位10件」といった条件をSQLひとつで書けるのは、専用ベクトルDBだと別のクエリDSLを覚え直す必要があるところで、既存のSQL資産を活かせます。
セキュリティ観点
RAGにユーザー入力を扱う以上、プロンプトインジェクション対策は避けて通れません。pgvector自体はDB拡張なのでインジェクション対策の主戦場ではありませんが、検索結果をそのままLLMに渡すパイプラインの中でエスケープや権限フィルタを組み込む設計が必要です。
パフォーマンスチューニングと運用上の注意
pgvectorは軽量に始められますが、規模が伸びると典型的な詰まりが出ます。よく話題になる論点をまとめます。
インデックスパラメータの初期値
以下は一般的な初期値の目安として言及されることが多い値です。最終的には実データでベンチマークして決めます。
IVFFlatのlists:データ件数の平方根前後を初期値の目安にする例が多い。probesはlistsの5〜10%程度から検証を始めるのが実務的
HNSWのef_search:ef_searchを大きくすると精度が上がるがレイテンシも上がる。100前後から始めて計測しながら調整する
メモリと共有バッファ
HNSWはメモリを消費します。共有バッファがベクトル列とインデックスに対して十分か、ワークメモリ設定が偏っていないかを実行計画で確認します。マネージドサービスでインスタンスサイズを上げないと収まらないケースがあります。
再インデックスと運用
IVFFlatはデータ分布が偏るとクラスタ再学習の効果が薄れる。データ追加が続くケースでは定期的なインデックス再構築が必要
HNSWはインクリメンタル更新に強いが、大量削除後の物理的な断片化は不要領域回収とインデックス再構築で対処する
バックアップとリカバリ
vector列は通常のカラムと同じく標準のダンプツールやバックアップ機構で扱えます。ただし埋め込みのサイズが大きい場合、バックアップ容量が跳ねます。埋め込みは再計算可能なデータなので、埋め込み元のテキストだけをバックアップし、埋め込みは復元時に再生成する運用も選択肢になります。
フリーランス視点|pgvectorスキルは案件でどう評価されるか
pgvectorは「AIエンジニア寄りのバックエンド」というポジションで評価されるスキルセットです。単発で高単価というより、RAG構築案件や生成AIプロダクト開発の中で、DB側の実装ができる人として評価される傾向があります。
需要のあるスキル組み合わせ
pgvector+LangChain/LlamaIndex:RAG案件で最も汎用性が高い
pgvector+PostgreSQL運用(不要領域回収・レプリケーション・パーティショニング):既存基幹DBに追加する案件で強み
pgvector+LLM API連携(OpenAI・GeminiなどのLLM APIエコシステム把握):AIプロダクト全体の設計を任される
案件動向の観測
主要フリーランスエージェント数社の公開案件(2026年時点)を確認すると、「pgvector」の名指し募集はまだ限定的です。一方で「RAG構築」「ベクトルDB」「PostgreSQL+生成AI」という表現でpgvectorを想定した案件が公開案件ベースで見られるようになっています。RAG構築案件やAIエージェント開発案件、LLMファインチューニング案件の周辺スキルとしてpgvectorをアピールできると、獲得可能な案件の幅が広がりやすくなります。
自分の市場単価を確認したい方へ
生成AI・RAG周辺の実務経験を踏まえて自分がどのくらいの単価を狙えるか気になる方は、無料のフリーランスエンジニア単価診断で現在の市場単価の目安を確認できます。単価を体系的に上げる考え方はフリーランスエンジニアの単価相場と単価の上げ方で整理しています。
ミニFAQ
Q. pgvectorだけを覚えれば案件は取れますか。
A. 単独でスキルとして名指しされる案件は限られます。RAG構築・生成AIプロダクト開発の文脈でPostgreSQL運用+LLM API+LangChain/LlamaIndexとセットで提案できるようにしておくと採用されやすい傾向があります。関連するAIエンジニアの案件動向もあわせて確認しておくと立ち位置が見えやすくなります。
よくある失敗と対策
失敗1:空テーブルにIVFFlatを作って精度が出ない
IVFFlatはクラスタ学習にデータが必要です。データを入れる前にインデックスを作ると、クラスタが偏り検索精度が出ません。先にデータを投入してからインデックスを構築するのが原則です。
失敗2:埋め込みモデルの次元と列定義がずれる
vector型を768次元で定義した列にOpenAIの1536次元を投入するとエラーになります。埋め込みモデルの仕様変更・切り替え時は、モデルの出力次元と列定義を必ず確認します。
失敗3:距離演算子の順序を逆にする
コサイン距離(<=>)は「小さいほど近い」です。ソート方向を間違えると遠い順に返ってきます。内積演算子(<#>)は負値を返す仕様なので符号の扱いにも注意します。
失敗4:インデックスなしで本番投入する
数万件までは全件走査でも動くため、PoC成功の勢いでインデックスなしのまま本番に載せてしまう事故が起きがちです。リリース前に必ずデータ規模想定でインデックスの必要性を検証します。
失敗5:バックアップ設計を後回しにする
埋め込みデータは通常のカラムより容量が跳ねます。バックアップ時間・ストレージコストが想定を超えることがあります。再生成可能な情報として扱えるかどうかを設計初期に決めておきます。
独自比較|pgvectorが向かない5つのシグナル
以下のいずれかに強く当てはまるなら、pgvectorではなくPinecone・Weaviate・Qdrant等の専用ベクトルDBを検討したほうがよい可能性が高いシグナルです。
データ件数が数千万〜億単位で、かつ低レイテンシが必須
QPS(毎秒クエリ数)が数百〜数千規模で常時発生する
PostgreSQLの運用体制がなく、DB運用の学習コストを避けたい
ベクトル検索と業務データを完全に分離したい設計方針
マルチテナントで大量の別名前空間を高速に切り替える要件がある
逆にどれも該当しないなら、まずはpgvectorで始めて、必要になったら専用DBを検討する順が実務では合理的です。
まとめ
pgvectorは、PostgreSQLを既に運用しているチームが「別のミドルウェアを増やさずにベクトル検索を始める」ための最短ルートです。中規模までは実務的に十分ワークし、大規模・低レイテンシ要件になったら専用ベクトルDBへの移行を検討するという段階戦略が現実的です。
要点は次の5つです。
pgvectorはPostgreSQLにvector型・距離演算子・IVFFlat/HNSWインデックスを追加する拡張機能
用途はテキスト埋め込みならコサイン距離(<=>)が中心。距離演算子の向きに注意
インデックスは規模と要件で選ぶ。数万〜数十万ならIVFFlat、それ以上や精度重視ならHNSW
RAG構築ではLangChain・LlamaIndexと組み合わせると実装が薄く済む
案件では単独スキルより、RAG・LLM API・PostgreSQL運用との組み合わせで評価されやすい
次の一歩としては、まずローカルのDocker PostgreSQLでpgvectorを有効化し、小さな社内文書コーパスでRAGを組んでみるのが最短の学習ルートです。実装イメージを掴んだあと、ベクトルDBの選び方(Pinecone・Weaviate・Qdrant・pgvector)やRAG構築案件の実情を読むと、案件現場でどう位置づけるかが立体的に見えてきます。
参照・一次情報
よくある質問
Q1. pgvectorはどのバージョンのPostgreSQLで使えますか。
A. 一般に11以降で動作します。ただし新しい機能や改善は新しいPostgreSQLバージョンで先に入るため、可能なら14以降を推奨する情報が多い傾向です。マネージドサービスを使う場合は、そのサービスがサポートするpgvectorのバージョンも確認します。
Q2. IVFFlatとHNSWはあとから切り替えられますか。
A. インデックスを作り直せば切り替えられます。既存のクエリはソート句を変えずにインデックスだけ変更できるケースが多いですが、ef_search等のパラメータ調整が必要になります。切り替え時は必ずベンチマークを取り直します。
Q3. pgvectorのバージョンアップは慎重にすべきですか。
A. 距離演算子の挙動やインデックス実装が変更されることがあります。特にHNSW関連は改善が続いているため、本番運用中はマイナーバージョンでもリリースノートを確認します。ステージング環境で検索結果の差分を確認してからの適用が安全です。
Q4. 埋め込みモデルの選び方は。
A. 用途と多言語対応で選びます。日本語主体ならmultilingual対応モデル、英語主体ならOpenAIのtext-embedding-3-small/largeが選択肢に入ります。モデルを変更するとベクトルの意味空間が変わるため、埋め込みの作り直しが必要です。初回設計時にモデル選定を確定させておくと後戻りが少なくて済みます。
Q5. pgvectorでフィルタ付き検索は書けますか。
A. 条件句で通常のカラムと組み合わせられます。ただしフィルタ条件が厳しいときはインデックスの効きが弱まり、想定より遅くなることがあります。カテゴリ・日付など頻用フィルタは、pgvectorのインデックスと通常のインデックスを組み合わせる設計を検討します。
Q6. pgvectorはローカル開発でも使えますか。
A. ローカルのPostgreSQLでも同じ手順で導入できます。Dockerイメージでpgvector入りのPostgreSQLを起動できるため、開発環境と本番環境の差を小さくしやすい構成です。Ollamaでローカル埋め込みモデルを動かせば、完全ローカルなRAG検証環境も組めます。
Q7. Elasticsearchのベクトル検索とはどう違いますか。
A. Elasticsearchも近年ベクトル検索機能を強化しています。全文検索と組み合わせるハイブリッド検索が要件ならElasticsearchが選択肢になります。既にPostgreSQL資産があり、業務データとの結合を優先するならpgvectorのほうが導線が短い傾向です。
Q8. pgvectorに向かない要件を見極めるには何を見ればいいですか。
A. 想定件数・想定QPS・レイテンシ要件・運用体制の4つを先に固めます。件数が数千万を超え、QPSが数百以上、レイテンシ一桁ms必須なら専用ベクトルDBが有力です。逆にどれも中規模なら、pgvectorで十分にワークする可能性が高くなります。
Q9. pgvectorはRAG以外にも使えますか。
A. レコメンド・重複検知・画像類似検索・チャットログの類似クラスタリングなど、埋め込みで表現できるすべての類似検索用途に使えます。ただし画像特徴量など極端に高次元の場合はメモリと精度のトレードオフに注意します。
Q10. マネージドサービスと自前運用のどちらがよいですか。
A. 小規模から中規模ではマネージド(RDS・Supabase・Neonなど)が第一候補です。バックアップ・レプリケーション・アップデートの手間が大幅に減ります。自前運用が必要なのは、コンプライアンス上の理由やインスタンス構成に強い制約があるケースに限られます。
関連するタグ:

