diff --git a/app/services/alpaca_price_service.py b/app/services/alpaca_price_service.py index 3ee5c51..16a6ee9 100644 --- a/app/services/alpaca_price_service.py +++ b/app/services/alpaca_price_service.py @@ -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) - stmt = stmt.on_conflict_do_nothing(constraint='uq_alpaca_price_data') - result = await db.execute(stmt) + # 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}")