-
2025-08-20 PostgreSQLPostgreSQL ナレッジ
PostgreSQL+pgvectorをOpen-WebUIのベクトルDBとして利用する。
はじめに
本記事では、PostgreSQLにpgvectorを組み合わせて、Open-WebUIのベクトルDBとして活用する方法を解説します。
Open-WebUI について
Open-WebUI は、大規模言語モデル(LLM)と対話するための オープンソース Web インターフェースです。
ローカル環境や社内ネットワーク内のインフラ上で動作させることができ、GUIベースでチャットやナレッジ検索が行える環境を構築できます。
インターネットに接続されない環境に構築した際には、通信やデータの処理がすべてローカル環境内で完結するため、社外に機密情報が流出するリスクを最小限にできます。
LLM とベクトルDB
LLM(大規模言語モデル)は、膨大なテキストデータから学習した「パターン」や「ルール」に基づいて、ユーザーの質問(プロンプト)に対して推論的に自然言語で回答(応答)する仕組みです。
ただし、LLM は学習済みの情報しか持たないため、最新の情報や社内独自の情報などについては対応できません。
Open-WebUIは、LLM とのチャット機能に加えて、ベクトル DB と呼ばれるデータベースに格納された外部情報を検索・参照し、回答する RAG(Retrieval-Augmented Generation) という仕組みを利用できます。
このベクトル DB には、文書やテキストをベクトル(数値の集合)として変換した情報が保存されており、ユーザーの質問に対して意味的に近い情報を効率的に検索できます。
PostgreSQL + pgvector をベクトル DB として利用する
Open-WebUIは、ベクトルDBとして PostgreSQL を利用できます。その際、PostgreSQL には pgvector 拡張モジュールが導入されている必要があります。
pgvector 拡張モジュールは GitHub からダウンロードできます。
https://github.com/pgvector/pgvector
もちろんパフォーマンスについては、専用のベクトル DB の方が高性能ではありますが、中規模(データが数百万程度)であれば PostgreSQL + pgvector でも十分実用的と評価されているようです。
新たに専用のベクトル DB(Qdrant など)を導入する際には、運用方法・設定・監視体系などを一から学習する必要があります。
使い慣れた PostgreSQL を利用することで、学習コストを抑えられる他、既存の監視ツールやバックアップ、ログ管理、アラート通知といった運用基盤に組み込めるという利点があります。
実際の導入手順
以下の手順は、下記の環境で行いました。
- RokcyLinux 9.6
- Open-WebUI 0.6.18
- Ollama 0.9.6
- PostgreSQL 17.5
- /usr/local/pgsql-17.5 にインストール
- pgvector-0.8.0
pgvector の導入手順
まずは、pgvector を GitHub からダウンロードします。
2025/08 時点では、バージョン 0.8.0 が最新でした。
pgvector のダウンロードと展開
$ cd /tmp
$ wget https://github.com/pgvector/pgvector/archive/refs/tags/v0.8.0.tar.gz
$ tar -xvzf v0.8.0.tar.gz
これで /tmp に pgvector のソースコードが展開されました。
pgvector のインストールと導入
次に pgvector をインストールします。
sudo すると、デフォルトでは環境変数が引き継がれないため、make install では --preserve-env=PG_CONFIG を記述して、PG_CONFIG 環境変数が引き継がれるようにしています。
$ cd ./pgvector-0.8.0/
$ export PG_CONFIG=/usr/local/pgsql-17.5/bin/pg_config
$ make
$ sudo --preserve-env=PG_CONFIG make install
これで pgvector のインストールが完了しましたので、最後に PostgreSQL のデータベースに pgvector を導入します。
Open-WebUI のベクトル DB として利用するデータベースの名前は「openwebui_db」とします。
openwebui_db に postgres ユーザでログインし、CREATE EXTENSION コマンドを実行して pgvector を導入します。
openwebui_db=# CREATE EXTENSION vector;
CREATE EXTENSION
CREATE EXTENSION に指定する名前は pgvector ではなく vector です。
openwebui_db=# SELECT * FROM pg_extension;
oid | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
-------+---------+----------+--------------+----------------+------------+-----------+--------------
13595 | plpgsql | 10 | 11 | f | 1.0 | |
16390 | vector | 10 | 2200 | t | 0.8.0 | |
(2 rows)
無事に導入されていることを確認できました。
Open-WebUI のベクトル DB の指定を PostgreSQL + pgvector にする。
PostgreSQL 側の準備ができましたので、Open-WebUI 側を操作します。
Open-WebUI が利用するベクトル DB の種類は、環境変数「VECTOR_DB」によって制御されます。
PostgreSQL + pgvector を利用する場合には、VECTOR_DB に「pgvector」を指定します。
また、PostgreSQL データベースへの接続文字列を、環境変数「DATABASE_URL」に指定します。
export する場合を例として下記に記載します。
export VECTOR_DB=pgvector
export DATABASE_URL=postgresql://openwebui_user:password@localhost:5432/openwebui_db
※ 接続文字列は「postgresql://<ユーザ名>:<パスワード>@<接続先名 or IP アドレス>:<ポート番号>/<データベース名>」という形式になります。
作成されたオブジェクトを確認
Open-WebUI を起動すると、自動的にテーブルやインデックスなどのオブジェクトが作成されます。
openwebui_db=> \dt
List of relations
Schema | Name | Type | Owner
--------+------------------+-------+-----------
public | alembic_version | table | openwebui
public | auth | table | openwebui
public | channel | table | openwebui
public | channel_member | table | openwebui
public | chat | table | openwebui
public | chatidtag | table | openwebui
public | config | table | openwebui
public | document | table | openwebui
public | document_chunk | table | openwebui
public | feedback | table | openwebui
public | file | table | openwebui
public | folder | table | openwebui
public | function | table | openwebui
public | group | table | openwebui
public | knowledge | table | openwebui
public | memory | table | openwebui
public | message | table | openwebui
public | message_reaction | table | openwebui
public | migratehistory | table | openwebui
public | model | table | openwebui
public | note | table | openwebui
public | prompt | table | openwebui
public | tag | table | openwebui
public | tool | table | openwebui
public | user | table | openwebui
(25 rows)
ベクトル DB というので、てっきり RAG 専用の DB かと思いましたが、ユーザなどの以外の情報も登録されているようです。
Open-WebUI では、「ナレッジベース」に「コレクション」と呼ばれる単位で文書やナレッジ情報を追加できます。
ユーザーの質問に対して回答を生成する際、関連づけられたナレッジベースのコレクションが参照されます。
実際に「WALのアーカイブ」というタイトルでコレクションを追加すると、file テーブルに追加されました。
openwebui_db=> SELECT id, filename FROM file;
id | filename
--------------------------------------+----------------------
173b8644-1c2a-4bbd-b689-18dfc87a1f07 | WAL のアーカイブ.txt
(1 row)
まとめ
以上が、簡単ではありますが、Open-WebUI のベクトル DB に PostgreSQL + pgvector を利用する方法についての解説となります。
すでに PostgreSQL を運用している実績やノウハウがあるようでしたら、PostgreSQL + pgvector は、(中規模用途には)十分実用的な選択肢になると思います。