pgvectorとは?
pgvector は PostgreSQL にベクトルのデータ型と類似度検索を追加します。埋め込みを通常のテーブル列に保存して SQL で問い合わせ、ほかのデータと結合し、普通の WHERE 句で絞り込むことが、同じトランザクションの中でできます。
インデックスがなければ厳密検索を行います。高速化のために 2 種類の近似インデックスを提供しています。HNSW(階層型のグラフで、再現率が高くメモリを多く使う)と IVFFlat(クラスターで、構築が速く再現率は低め)です。全精度、半精度、バイナリ、スパースのベクトルに対応しています。標準の vector 型は最大 16,000 次元まで保存できますが、インデックス化できるのは 2,000 次元までです。半精度は最大 4,000 次元、バイナリは最大 64,000 次元までインデックス化できます。バージョン 0.8.0 では反復インデックススキャンが加わり、フィルターを通過する行が十分な数になるまで検索を続けるようになりました。
Postgres 13 以降に対応していますが、未リリースの 0.9.0 では 13 と 14 のサポートが外れます。ほぼすべてのマネージド Postgres サービスで利用できます。最新リリースの 0.8.7(2026年10月1日)では、コード実行につながりうるセキュリティ上の欠陥が修正されました。
pgvectorは使う価値があるか?
pgvector を使えば、スタックからサービスを丸ごと 1 つ減らせます。埋め込みは、それが説明する文書と同じデータベース、同じバックアップ、同じトランザクションの中に置かれるため、同期を保つべき 2 つ目のストアは存在せず、フィルターも普通の SQL です。GitHub のスターは約 23,450 で、未解決の issue は 17 件しかなく、未リリースの 0.9.0 はすでに変更履歴に載っています。
快適に使える範囲は、宣伝から受ける印象より狭いものです。Postgres のホスティングを販売する Encore は、中程度の負荷(毎秒数百クエリ)で約 500 万ベクトル未満なら Pinecone と同等だとしていますが、500 万から 1,000 万の間では shared_buffers、work_mem、HNSW の設定を慎重に調整する必要があるとしています。その理由はストレージにあります。README によれば各ベクトルは 1 次元あたり 4 バイトに 8 バイトを加えた大きさなので、1,536 次元の埋め込み 1,000 万件はインデックスなしで約 61.5 GB になり、グラフが maintenance_work_mem を超えると HNSW の構築は大幅に遅くなります。半精度ならこれが半分になります。この段階を超えても、pgvectorscale や VectorChord を使えば、もうしばらくデータを Postgres に置いておけます。
フィルタリングには注意が必要です。近似インデックスはスキャンの後でフィルターをかけるため、README 自身の例は厳しいものです。既定の hnsw.ef_search が 40 で、行の 10% に一致するフィルターの場合、1 回のクエリが返す結果は平均で約 4 件です。反復スキャン、部分インデックス、テナント単位のパーティショニングで解決できますが、どれも既定では有効になっていません。
2026年にはセキュリティ修正が出ており、対応する価値があります。並列 HNSW 構築時のバッファオーバーフローである CVE-2026-3172 では、インデックスを作成できるユーザーがほかのテーブルのデータを漏えいさせることができました(0.6.0 から 0.8.1 が該当し、0.8.2 で修正)。32 ビットシステムでのみ発生する IVFFlat 構築時のオーバーフロー CVE-2026-18022 は 0.8.6 で修正されました。同じく IVFFlat 構築に関わる CVE-2026-103484 は、0.8.6 までのすべてのバージョンで任意のコード実行につながる可能性があり、0.8.7 で修正されています。マネージドサービスでは、拡張のバージョンは自分ではなくプロバイダーのスケジュールに従います。ベンチマーク のグラフより先にバージョンを確認すべき本当の理由はそこにあります。
真価を発揮する場面
Amazon RDS を使う SaaS 企業のバックエンドエンジニア
200 万件のサポートチケットにセマンティック検索を追加する
halfvec 列を追加して埋め込みを埋め戻し、HNSW インデックスを構築して、普通の WHERE 句で結果をチケットテーブルと結合します。1,536 次元ならベクトルデータは約 6 GB で、少し大きめのインスタンスにすれば、新しいサービスを運用せずに扱えます。
顧客テナントを 400 社抱える B2B スタートアップのエンジニアリング責任者
RAG の検索で顧客ごとの文書を分離しておく
埋め込みテーブルをテナント単位でパーティショニングするか部分インデックスを追加し、反復スキャンを有効にして、フィルター付きクエリが結果を欠けなく返すようにします。行レベルセキュリティはほかのテーブルと同じように適用されるため、チームがすでに監査している仕組みで分離できます。
マネージドなベクトルデータベースの請求額を検討している CTO
ベクトル検索に専用のベンダーが必要かどうかを判断する
約 500 万ベクトル未満で毎秒数百クエリなら、Encore の指針は Postgres にとどまることを勧めています。バックアップは 1 つ、アクセスモデルも 1 つで、同期ジョブは不要です。その代わり、インデックスがメモリに収まらなくなったときにはチューニングの時間がかかります。
導入前に確認すること
- 導入
- マネージド Postgres では CREATE EXTENSION vector を実行します。セルフホストでは、Postgres 13 以降向けにソース(make、make install)またはパッケージマネージャーからインストールします。アップグレードは各データベースで ALTER EXTENSION vector UPDATE を実行します。
- 連携
- どの Postgres クライアントや ORM でも使え、ほとんどの言語に vector 型を扱うライブラリがあります。プロジェクトのホスティングプロバイダー一覧の issue に載っている大手マネージドサービスで利用でき、Open WebUI などの RAG ツールでバックエンドとして使われています。
- データとプライバシー
- すべてが Postgres インスタンスの中にとどまり、既存のバックアップ、ロール、行レベルセキュリティの管理下に置かれます。拡張がどこ かにデータを送ることはありません。PostgreSQL License は商用利用を制限していません。
- 大規模利用時のコスト
- ライセンス費用はなく、支払うのはより大きなデータベースの費用です。各ベクトルは 1 次元あたり 4 バイトに 8 バイトを加えた大きさなので、1,536 次元のベクトル 1,000 万件には約 61.5 GB(halfvec ならその半分)とインデックス分が必要です。構築時にはグラフを収められるだけの maintenance_work_mem が求められます。
- 制限
- インデックスの上限は 2,000 次元(半精度で 4,000 次元)で、スキャン後にフィルターをかけるため反復スキャンが必要です。メモリが足りなくなると HNSW の構築は遅くなり、水平シャーディングはなく、0.9.0 では Postgres 13 と 14 のサポートが外れます。
良い点
- 追加のサービスが不要で、ベクトル、行、トランザクションが 1 か所にまとまる
- フィルターと結合を普通の SQL で書ける
- ほぼすべてのマネージド Postgres で利用できる
- 制約の少ない PostgreSQL License
気になる点
- 既定のままだと、フィルター付きクエリが要求より大幅に少ない行しか返さないことがある
- 標準の型ではインデックス化できるのが 2,000 次元まで
- 2026年の CVE が 3 件あり、うち 1 件は 0.8.7 より前でコード実行を許す
- 数十億規模のベクトルや非常に高いクエリレート向けには作られていない
おすすめの人
すでに Postgres を使っていて、数百万程度のベクトルで RAG やセマンティック検索を構築するチームに向いています。
pgvectorの代替
pgvector:よくある質問
- pgvectorは使う価値があるか?
- すでに Postgres を使っている多くのチームにとって、専用のベクトルデータベースは余分なインフラであり、pgvector がそれを不要にします。 評価は5点満点中4.6点です。
- pgvectorの料金は?
- PostgreSQL License のもとで無料のオープンソースです。コストは、すでに運用している Postgres インスタンス、またはそれより大きなインスタンスの費用だけです。
- pgvectorの欠点は?
- 既定のままだと、フィルター付きクエリが要求より大幅に少ない行しか返さないことがある; 標準の型ではインデックス化できるのが 2,000 次元まで; 2026年の CVE が 3 件あり、うち 1 件は 0.8.7 より前でコード実行を許す; 数十億規模のベクトルや非常に高いクエリレート向けには作られていない.
- pgvectorは誰に向いているか?
- すでに Postgres を使っていて、数百万程度のベクトルで RAG やセマンティック検索を構築するチームに向いています。
- チームや本番環境でpgvectorを使うと費用はいくらか?
- ライセンス費用はなく、支払うのはより大きなデータベースの費用です。各ベクトルは 1 次元あたり 4 バイトに 8 バイトを加えた大きさなので、1,536 次元のベクトル 1,000 万件には約 61.5 GB(halfvec ならその半分)とインデックス分が必要です。構築時にはグラフを収められるだけの maintenance_work_mem が求められます。
- pgvectorは企業データを扱っても安全か?
- すべてが Postgres インスタンスの中にとどまり、既存のバックアップ、ロール、行レベルセキュリティの管理下に置かれます。拡張がどこかにデータを送ることはありません。PostgreSQL License は商用利用を制限していません。
- pgvectorの代わりになるものは?
- 当サイトでレビューした中で最も近い代替はQdrant, Milvus, Weaviate, LanceDB 、 Chromaです。
回答確認日:2026年10月23日
