-- Supabase 데이터베이스 설정 스크립트 -- Supabase SQL Editor에서 실행하세요 -- 1. pgvector 확장 활성화 CREATE EXTENSION IF NOT EXISTS vector; -- 2. 문서 테이블 생성 CREATE TABLE IF NOT EXISTS documents ( id BIGSERIAL PRIMARY KEY, title TEXT NOT NULL, content TEXT NOT NULL, category TEXT DEFAULT '일반', embedding VECTOR(768), -- ko-sroberta 모델 차원 created_at TIMESTAMPTZ DEFAULT NOW() ); -- 3. 채팅 기록 테이블 생성 CREATE TABLE IF NOT EXISTS chat_history ( id BIGSERIAL PRIMARY KEY, session_id TEXT NOT NULL, user_message TEXT NOT NULL, bot_response TEXT NOT NULL, created_at TIMESTAMPTZ DEFAULT NOW() ); -- 4. 벡터 검색 함수 생성 CREATE OR REPLACE FUNCTION match_documents( query_embedding VECTOR(768), match_count INT DEFAULT 3 ) RETURNS TABLE ( id BIGINT, title TEXT, content TEXT, category TEXT, similarity FLOAT ) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT d.id, d.title, d.content, d.category, 1 - (d.embedding <=> query_embedding) AS similarity FROM documents d WHERE d.embedding IS NOT NULL ORDER BY d.embedding <=> query_embedding LIMIT match_count; END; $$; -- 5. 인덱스 생성 (검색 성능 향상) CREATE INDEX IF NOT EXISTS documents_embedding_idx ON documents USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100); -- 6. 샘플 데이터 (선택사항) INSERT INTO documents (title, content, category) VALUES ('연차휴가 기준', '소방공무원의 연차휴가는 근속년수에 따라 다르게 부여됩니다. 1년 미만: 11일, 1년 이상 2년 미만: 12일, 2년 이상: 매년 1일씩 가산되어 최대 21일까지 부여됩니다.', '휴가'), ('당직근무 시간', '소방서 당직근무는 일반적으로 09:00부터 다음날 09:00까지 24시간 교대근무 형태로 운영됩니다. 다만, 각 소방서별로 상이할 수 있습니다.', '근무'), ('병가 신청', '병가는 질병 또는 부상으로 인해 직무를 수행할 수 없을 때 신청합니다. 연간 60일 이내 사용 가능하며, 7일 이상 병가시 의사 진단서가 필요합니다.', '휴가'), ('초과근무수당', '초과근무수당은 정규 근무시간을 초과하여 근무한 경우 지급됩니다. 평일 초과근무는 통상임금의 150%, 휴일근무는 200%가 적용됩니다.', '수당');