From 1b037c925679b21acbf7a1768c47bca866a39a7b Mon Sep 17 00:00:00 2001 From: I Luk Kim Date: Sun, 29 Mar 2026 19:15:01 -0700 Subject: [PATCH] =?UTF-8?q?fix:=20full=20force=5Frebuild=20=EC=8B=9C=20uni?= =?UTF-8?q?verse=5Fsnapshot=20=EC=A0=84=EC=B2=B4=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tickers=None (전체 빌드)일 때 registry에서 제거된 stale 티커 데이터도 정리되도록 DELETE FROM universe_snapshot 실행. Co-Authored-By: Claude Sonnet 4.6 --- app/services/universe_service.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/services/universe_service.py b/app/services/universe_service.py index 8e1cb27..db2d7c4 100644 --- a/app/services/universe_service.py +++ b/app/services/universe_service.py @@ -290,14 +290,19 @@ class UniverseService: ) if force_rebuild: - # Delete in chunks to avoid huge IN clauses - for i in range(0, len(ticker_list), _CHUNK): - chunk = ticker_list[i:i + _CHUNK] - await db.execute( - UniverseSnapshot.__table__.delete().where( - UniverseSnapshot.ticker.in_(chunk) + if not tickers: + # Full rebuild: wipe ALL snapshots (also removes stale tickers + # that were de-registered from the registry) + await db.execute(UniverseSnapshot.__table__.delete()) + else: + # Partial rebuild: delete only the requested tickers + for i in range(0, len(ticker_list), _CHUNK): + chunk = ticker_list[i:i + _CHUNK] + await db.execute( + UniverseSnapshot.__table__.delete().where( + UniverseSnapshot.ticker.in_(chunk) + ) ) - ) await db.commit() # Load registry metadata (sector/industry/exchange/CIK)