Schema 를 코드처럼 다뤄
Production SQLite schema 는 시간에 따라 진화. 미리 답해야 할 두 질문:
- Fresh 설치가 DB 를 현재 버전까지 어떻게 끌어오나?
- 기존 설치가 N -> N+1 어떻게 안전하게 업그레이드?
SQLite 가 PRAGMA user_version 줘 — DB 헤더에 저장된 32-bit 정수. 마이그레이션 cursor 로 사용. 패턴 (피파의 backend/store/conversations.py + 수많은 다른 곳에서 사용):
- 시작 시
PRAGMA user_version읽기. - 현재에서 target 까지 각 마이그레이션 step 을 transaction 안에서 적용.
- 각 마이그레이션 마지막 statement 로
user_version증가.
Self-reference: 피파의 SQLite store 가 정확히 이 패턴 —
backend/store/conversations.py 의 _init_db() 봐. 컬럼/테이블 추가할 때마다 user_version 증가. Conversation GET 마다 healing 로직이 schema 와 JSONL ground truth 정렬 유지.