4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pgvector導入メモ

Posted at

はじめに

ChatGPTで自前のDB(PostgreSQL16)に保管したドキュメントから自然言語でQAをする仕組みを検証するために、前回導入したPostgreSQL16にpgvectorを導入し、ベクトルデータベースとして利用可能な環境を作成します。
特記事項なき場合は作業用の一般ユーザーでコマンド実行します。

pgvector導入

公式のGitHubの導入手順に従い、導入していきます。
https://github.com/pgvector/pgvector

cd /usr/local/src
git clone --branch v0.5.1 https://github.com/pgvector/pgvector.git
cd pgvector
export PATH=${PATH}:/usr/local/pgsql161/bin
make
sudo su
export PATH=${PATH}:/usr/local/pgsql161/bin
make install

※前回導入したPostgreSQLのバイナリディレクトリにパスを通す必要があります。
以上で導入は完了です。

pgvector初期設定

ベクトルデータベース用PostgreSQLユーザーの作成

postgresql管理ユーザーで実行
createuser -P -e vecdbuser 
Enter password for new role: 
Enter it again: 
Password: 
SELECT pg_catalog.set_config('search_path', '', false);
CREATE ROLE vecdbuser PASSWORD 'xxx####' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS;

ベクトルデータ用DBとテーブルの作成

まずはCreateDBを行います。この時点では特に特殊な設定はありません。

createdb -e -E UTF8 -O vecdbuser gptretdb -T template0

次に作成したDBにpgvector拡張を作成します。
前手順で作成したPostgreSQLユーザーではCREATE EXTENSIONできませんので、PostgreSQL管理ユーザーで操作を行います。

psql -d gptretdb
psql (16.1)
Type "help" for help.

gptretdb=# CREATE EXTENSION vector;
CREATE EXTENSION
gptretdb=# \dx
                             List of installed extensions
  Name   | Version |   Schema   |                     Description                      
---------+---------+------------+------------------------------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
 vector  | 0.5.1   | public     | vector data type and ivfflat and hnsw access methods
(2 rows)

vectorという拡張が作成されていることを確認します。
下記のSQLを実行し、ベクトルデータ用のカラムを持つテーブルを作成します。

動作確認

簡単なデータも登録し、テストを行います。

gptretdb=# CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
CREATE TABLE
gptretdb=# INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
INSERT 0 2
gptretdb=# SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
 id | embedding 
----+-----------
  1 | [1,2,3]
  2 | [4,5,6]
(2 rows)
gptretdb=# \q

embedding列にデータが登録されていることが確認出来たら動作確認完了です。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?