본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

pgvector 설치와 vector 컬럼 정의

~18 min · pgvector, setup, sql

Level 0Scout
0 XP0/41 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

2분 안에 시작하기

데이터베이스마다 확장을 한 번 설치한 뒤 vector(N) 컬럼을 추가해. 차원은 컬럼을 만들 때 고정되며 임베딩 모델의 출력 차원과 정확히 맞아야 해. 다르면 삽입할 때 실행 오류가 나.

저장 공간 특성

1024차원 실수 벡터 하나는 디스크에서 약 4KB를 차지해. 청크 100만 개면 인덱스를 만들기 전 약 4GB이고, HNSW 인덱스까지 더하면 1.5–2배를 예상해야 해. 보통의 하드웨어에서도 Postgres로 감당할 수 있지만 디스크 용량은 미리 잡아 둬.

Code

pgvector 띄우기·sql
-- 대상 데이터베이스의 psql 안에서 실행
CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE chunks (
    id          bigserial PRIMARY KEY,
    source      text        NOT NULL,
    chunk_index int         NOT NULL,
    text        text        NOT NULL,
    metadata    jsonb       DEFAULT '{}'::jsonb,
    embedding   vector(1024) NOT NULL,
    updated_at  timestamptz DEFAULT now()
);

CREATE INDEX ON chunks USING gin (metadata jsonb_path_ops);
CREATE INDEX ON chunks (source, chunk_index);
파이썬에서 청크 삽입하기·python
import psycopg
from pgvector.psycopg import register_vector

conn = psycopg.connect('postgresql://localhost/myapp')
register_vector(conn)

with conn.cursor() as cur:
    cur.execute(
        'INSERT INTO chunks (source, chunk_index, text, metadata, embedding) '
        'VALUES (%s, %s, %s, %s, %s)',
        (chunk['metadata']['source'], chunk['metadata']['chunk_index'],
         chunk['text'], json.dumps(chunk['metadata']), vec),
    )
conn.commit()

External links

Exercise

Docker, Homebrew 등 편한 방법으로 로컬 Postgres를 실행해. pgvector를 설치하고 위의 chunks 테이블을 만든 뒤, 파이썬에서 행 50개를 삽입해. SELECT count(*)로 개수를 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.