PG_vector

- PostgreSQL과 함께 사용할 수 있는 Extension 중 하나로 벡터 데이터를 저장, 쿼리 및 분석하기 위한 기능을 제공한다. 벡터 데이터는 숫자 및 범주형 데이터의 조합으로 구성되며, 주로 머신 러닝, 데이터 분석 및 유사성 검색과 같은 작업에 유용함

 

https://github.com/pgvector/pgvector

 

GitHub - pgvector/pgvector: Open-source vector similarity search for Postgres

Open-source vector similarity search for Postgres. Contribute to pgvector/pgvector development by creating an account on GitHub.

github.com

 

1 ) PostgreSQL 설치

- 공식문서에 나온 설명에 따르면 homebrew로 postgresql을 설치할 경우 14 버전을 설치해야 한다고 가이드하고 있다.

 

# postgresql 14버전 설치
brew install postgresql@14

# postgres 실행
brew services start postgresql@14

# postgres 접속 테스트
psql postgres

# 접속 확인
psql (14.9 (Homebrew))
Type "help" for help.

postgres=#

 

2 ) PGvector 설치

# pgvector 설치
brew install pgvector

# postgres 접속
psql postgres
# extension 생성
postgres=# CREATE EXTENSION vector;
CREATE EXTENSION

# vector 테이블 생성
postgres=# CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
CREATE TABLE

# Vector Data Insert
postgres=# INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
INSERT 0 2

# Vector Data Select
postgres=# SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
 id | embedding
----+-----------
  1 | [1,2,3]
  2 | [4,5,6]
(2 rows)

- 데이터가 select 되는 것까지 확인하였다면 설치가 완료된 것

3 ) 예제 코드 테스트

https://github.com/pgvector/pgvector-python

 

GitHub - pgvector/pgvector-python: pgvector support for Python

pgvector support for Python. Contribute to pgvector/pgvector-python development by creating an account on GitHub.

github.com

- 공식 github에서 확인 가능하다.

 

# 소스코드 clone
git clone https://github.com/pgvector/pgvector-python.git

- 소스코드를 fork 하거나 바로 clone 하여 받아보면 아래와 같은 구조를 가진 프로젝트를 받게 된다. 가상환경을 구성하여 테스트해 보자

- Vscode를 활용하여 터미널을 열거나 Mac 터미널에서 프로젝트 디렉터리로 이동하여 가상환경을 생성한다.

 

# 가상환경 생성
python -m venv venv

# 가상환경 활성화
# 이 때 bash가 아닌 환경에서 활성화는 불가하다
source venv/bin/activate

# 활성화 이후 터미널에 (venv) 표시됨
(venv) jodohyeon-ui-MacBookPro:pgvector-python jodohyeon$

# 의존성 install
pip install -r requirements.txt

- Vscode 사용 시 기본 터미널이 zsh로 설정되어 있다면 활성화가 안될 수 있음 아래와 같이 bash로 설정이 필요함

 

- 인터프리터 설정이 안 되어 있을 경우 코드 실행이 불가능하다. 생성된 가상환경의 파이썬으로 설정해 주자

 

# postgres 접속
psql postgres

# test DB 생성
CREATE DATABASE pgvector_python_test;

# DB 선택
\c pgvector_python_test;

# tests 디렉토리 진입
cd tests

# test 코드 실행
pytest test_sqlalchemy.py

=========================== test session starts ===========================
platform darwin -- Python 3.11.5, pytest-7.4.2, pluggy-1.3.0
rootdir: /Users/jodohyeon/workspace/pgvector-python
configfile: pytest.ini
plugins: asyncio-0.21.1
asyncio: mode=Mode.AUTO
collected 15 items                                                        

test_sqlalchemy.py ...............                                  [100%]

=========================== 15 passed in 0.70s ============================
# 생성된 테이블 확인
pgvector_python_test=# \dt
           List of relations
 Schema |   Name    | Type  |   Owner
--------+-----------+-------+-----------
 public | core_item | table | jodohyeon
 public | orm_item  | table | jodohyeon
(2 rows)

 

- 여기까지 완료되었다면 pgvector 환경구성은 완료되었으며, tests에 존재하는 테스트 코드들과 examples 디렉터리에 존재하는 소스코드들을 참고하여 pgvector를 활용할 수 있다.