pgvector 시작하기

pgvector 시작하기

pgvector는 PostgreSQL에 벡터 유사도 검색을 더해 주는 오픈소스 확장이에요. 임베딩 벡터를 다른 데이터와 함께 한 테이블에 저장하고, SQL로 그대로 검색할 수 있다는 게 핵심이에요. 별도 벡터 DB를 띄우지 않아도 PostgreSQL의 ACID, 시점 복구, JOIN 같은 기능을 그대로 누리면서 벡터 검색까지 해결하고 싶을 때 아주 자연스러운 선택이 돼요.

출처: https://github.com/pgvector/pgvector

확장 켜기

pgvector를 쓰려면 먼저 데이터베이스마다 확장을 활성화해야 해요. 벡터 검색을 쓸 데이터베이스마다 한 번씩 실행하면 돼요.

CREATE EXTENSION vector;

벡터 컬럼 만들고 넣기

3차원 벡터 컬럼을 가진 테이블을 만들고, 벡터를 넣는 기본 흐름이에요.

CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');

가장 가까운 이웃 찾기

L2 거리 기준으로 가장 가까운 5개를 찾으려면 <-> 연산자와 ORDER BY를 쓰면 돼요.

SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

내적(inner product, <#>), 코사인 거리(<=>), L1 거리(<+>) 연산자도 함께 지원해요. 여기서 주의할 점이 하나 있는데, <#>는 음의 내적 값을 돌려줘요. PostgreSQL이 연산자에 대해 ASC 순서 인덱스 스캔만 지원하기 때문이에요. 정확한 내적 값을 얻고 싶다면 결과에 -1을 곱해 주면 돼요.

더 알아보기