Skip to content

Commit 4360d7d

Browse files
committed
sql
1 parent ef4bc1a commit 4360d7d

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* 이 파일은 pgvector 기반 검색 테이블을 한 번에 생성한다.
3+
* 흐름: 확장 활성화 → age_theme 생성/인덱스 → vocab_term 생성/인덱스 → ANALYZE
4+
*/
5+
6+
-- 확장 활성화
7+
CREATE EXTENSION IF NOT EXISTS vector;
8+
9+
-- age_theme 테이블 생성
10+
CREATE TABLE IF NOT EXISTS age_theme (
11+
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
12+
min_age INT NOT NULL,
13+
max_age INT NOT NULL,
14+
category VARCHAR(32) NOT NULL,
15+
theme TEXT NOT NULL,
16+
embedding VECTOR(768) NOT NULL,
17+
-- 무결성 검증
18+
CONSTRAINT ck_age_theme_age_range CHECK (min_age >= 0 AND max_age >= min_age)
19+
);
20+
21+
-- 범주/연령대 필터 인덱스
22+
CREATE INDEX IF NOT EXISTS idx_age_theme_cat_age
23+
ON age_theme(category, min_age, max_age);
24+
25+
-- 코사인 KNN 인덱스(저사양 환경 고려 ivfflat)
26+
CREATE INDEX IF NOT EXISTS idx_age_theme_embedding_ivfflat
27+
ON age_theme USING ivfflat (embedding vector_cosine_ops)
28+
WITH (lists = 50);
29+
30+
-- vocab_term 테이블 생성
31+
CREATE TABLE IF NOT EXISTS vocab_term (
32+
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
33+
term VARCHAR(128) NOT NULL UNIQUE,
34+
embedding VECTOR(768) NOT NULL
35+
);
36+
37+
-- 코사인 KNN 인덱스
38+
CREATE INDEX IF NOT EXISTS idx_vocab_term_embedding_ivfflat
39+
ON vocab_term USING ivfflat (embedding vector_cosine_ops)
40+
WITH (lists = 50);
41+
42+
-- 통계 수집
43+
ANALYZE age_theme;
44+
ANALYZE vocab_term;

0 commit comments

Comments
 (0)