pgvector 벡터 저장하기
pgvector 벡터 저장하기
pgvector의 벡터 컬럼은 일반 컬럼처럼 추가하고, 데이터도 SQL로 그대로 다룰 수 있어요. 테이블을 새로 만들 때 넣을 수도 있고, 이미 있는 테이블에 컬럼을 더할 수도 있어요.
테이블 만들고 벡터 넣기
새 테이블에 벡터 컬럼을 두는 모습이에요.
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
이미 있는 테이블에는 ALTER TABLE로 컬럼을 추가하면 돼요.
ALTER TABLE items ADD COLUMN embedding vector(3);
기본 vector 타입 외에도 half-precision(반정밀도), binary(이진), sparse(희소) 벡터 타입을 함께 지원해요. 벡터를 넣는 것도 문자열 형태 그대로예요.
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
대량 로드와 갱신
데이터가 많을 때는 COPY로 바이너리 포맷을 쓰면 훨씬 빠르게 밀어 넣을 수 있어요.
COPY items (embedding) FROM STDIN WITH (FORMAT BINARY);
upsert(있으면 갱신, 없으면 삽입)도 익숙한 ON CONFLICT 구문으로 처리해요.
INSERT INTO items (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;
단건 갱신과 삭제도 평범한 SQL이에요.
UPDATE items SET embedding = '[1,2,3]' WHERE id = 1;
DELETE FROM items WHERE id = 1;