fix: fetch_and_store_bars() interval 컬럼 추가 + CHUNK 분할

- interval 누락으로 uq_alpaca_price_data constraint 위반 방지
- 단일 INSERT → CHUNK=2300 분할 (14 params/row, asyncpg 한도 대비)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
main
I Luk Kim 4 months ago
parent e6ea1abb0e
commit 5bcba8632c

@ -61,6 +61,7 @@ class AlpacaPriceService:
rows.append({
"ticker": ticker,
"date": bar_dt,
"interval": interval,
"open": float(bar.get("o", 0)),
"high": float(bar.get("h", 0)),
"low": float(bar.get("l", 0)),
@ -74,13 +75,16 @@ class AlpacaPriceService:
if not rows:
return 0
# Batch insert — skip duplicates via ON CONFLICT DO NOTHING
stmt = pg_insert(AlpacaPriceData).values(rows)
# Batch insert with chunking (14 params/row → CHUNK=2300, 2300×14=32,200 < 32,767)
CHUNK = 2300
inserted = 0
for i in range(0, len(rows), CHUNK):
stmt = pg_insert(AlpacaPriceData).values(rows[i : i + CHUNK])
stmt = stmt.on_conflict_do_nothing(constraint='uq_alpaca_price_data')
result = await db.execute(stmt)
inserted += result.rowcount
await db.commit()
inserted = result.rowcount
if inserted:
logger.info(f"Alpaca: inserted {inserted} bars for {ticker}")

Loading…
Cancel
Save