From 893ecacc0e6c58e2347a1a541ae6ae7364986457 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Fri, 17 Apr 2026 08:07:50 +0900 Subject: [PATCH] =?UTF-8?q?ops(migrations):=20defer=20142=20NOT=20NULL=20u?= =?UTF-8?q?ntil=201=EC=A3=BC=20=EC=9A=B4=EC=98=81=20=EA=B4=80=EC=B0=B0=20?= =?UTF-8?q?=ED=9B=84=20=ED=99=9C=EC=84=B1=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 > = 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) --- .../142_ask_events_source_notnull.sql | 0 migrations/_deferred/README.md | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+) rename migrations/{ => _deferred}/142_ask_events_source_notnull.sql (100%) create mode 100644 migrations/_deferred/README.md diff --git a/migrations/142_ask_events_source_notnull.sql b/migrations/_deferred/142_ask_events_source_notnull.sql similarity index 100% rename from migrations/142_ask_events_source_notnull.sql rename to migrations/_deferred/142_ask_events_source_notnull.sql diff --git a/migrations/_deferred/README.md b/migrations/_deferred/README.md new file mode 100644 index 0000000..6ccea3f --- /dev/null +++ b/migrations/_deferred/README.md @@ -0,0 +1,18 @@ +# Deferred migrations + +이 디렉토리의 `*.sql` 파일은 `app/core/database.py:_parse_migration_files()` 의 +`migrations_dir.glob("*.sql")` (non-recursive) 에 잡히지 않으므로 자동 적용 안 됨. + +활성화 절차: `git mv migrations/_deferred/.sql migrations/.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 > ;` + 결과 0 확인 — 즉, 새 코드가 모든 INSERT 에 source 를 항상 채우는지 empirical 검증 +- 위 0 이면 142 활성화 → docker compose restart fastapi (init_db 가 자동 적용) + +이유: NOT NULL 적용 후 NULL INSERT 시도 시 ask_events 기록 실패 (data loss).