ops(migrations): defer 142 NOT NULL until 1주 운영 관찰 후 활성화
migration 142 ALTER COLUMN source SET NOT NULL 자동 적용 방지.
_run_migrations 의 glob('*.sql') 비재귀 → _deferred/ 무시.
활성화 절차 (D7 참조):
- 138~141 적용 + 7일 운영 후 SELECT COUNT(*) FROM ask_events
WHERE source IS NULL AND created_at > <deploy> = 0 확인
- git mv migrations/_deferred/142_*.sql migrations/142_*.sql
- docker compose restart fastapi (init_db 가 자동 적용)
이유: 새 코드의 source 누락 가능성 empirical 검증 후 lock.
NOT NULL 적용 후 NULL INSERT 시도 시 ask_events 기록 실패 (data loss).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit was merged in pull request #1.
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# Deferred migrations
|
||||
|
||||
이 디렉토리의 `*.sql` 파일은 `app/core/database.py:_parse_migration_files()` 의
|
||||
`migrations_dir.glob("*.sql")` (non-recursive) 에 잡히지 않으므로 자동 적용 안 됨.
|
||||
|
||||
활성화 절차: `git mv migrations/_deferred/<file>.sql migrations/<file>.sql` 후 deploy.
|
||||
|
||||
## 142_ask_events_source_notnull.sql
|
||||
|
||||
`source` 컬럼에 NOT NULL 제약 추가. **1주 운영 관찰 후 적용 권장**:
|
||||
|
||||
조건:
|
||||
- 138~141 적용 후 7일 운영
|
||||
- `SELECT COUNT(*) FROM ask_events WHERE source IS NULL AND created_at > <deploy_time>;`
|
||||
결과 0 확인 — 즉, 새 코드가 모든 INSERT 에 source 를 항상 채우는지 empirical 검증
|
||||
- 위 0 이면 142 활성화 → docker compose restart fastapi (init_db 가 자동 적용)
|
||||
|
||||
이유: NOT NULL 적용 후 NULL INSERT 시도 시 ask_events 기록 실패 (data loss).
|
||||
Reference in New Issue
Block a user