From 3e630166b491ccc07e3a2d6cc33c29572ac3be72 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 27 Feb 2026 15:03:24 +0000 Subject: [PATCH] fix: backfill meta update - handle existing rows with NOT NULL last_agg_id --- backend/backfill_agg_trades.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/backend/backfill_agg_trades.py b/backend/backfill_agg_trades.py index 0be8463..89d2223 100644 --- a/backend/backfill_agg_trades.py +++ b/backend/backfill_agg_trades.py @@ -112,13 +112,20 @@ def get_earliest_agg_id(conn: sqlite3.Connection, symbol: str) -> int | None: def update_earliest_meta(conn: sqlite3.Connection, symbol: str, agg_id: int, time_ms: int): - conn.execute(""" - INSERT INTO agg_trades_meta (symbol, earliest_agg_id, earliest_time_ms) - VALUES (?, ?, ?) - ON CONFLICT(symbol) DO UPDATE SET - earliest_agg_id = MIN(excluded.earliest_agg_id, COALESCE(agg_trades_meta.earliest_agg_id, excluded.earliest_agg_id)), - earliest_time_ms = MIN(excluded.earliest_time_ms, COALESCE(agg_trades_meta.earliest_time_ms, excluded.earliest_time_ms)) - """, (symbol, agg_id, time_ms)) + # 先检查是否已有该symbol的记录 + row = conn.execute("SELECT symbol FROM agg_trades_meta WHERE symbol = ?", (symbol,)).fetchone() + if row: + conn.execute(""" + UPDATE agg_trades_meta SET + earliest_agg_id = MIN(?, COALESCE(earliest_agg_id, ?)), + earliest_time_ms = MIN(?, COALESCE(earliest_time_ms, ?)) + WHERE symbol = ? + """, (agg_id, agg_id, time_ms, time_ms, symbol)) + else: + conn.execute(""" + INSERT INTO agg_trades_meta (symbol, last_agg_id, last_time_ms, earliest_agg_id, earliest_time_ms) + VALUES (?, ?, ?, ?, ?) + """, (symbol, agg_id, time_ms, agg_id, time_ms)) conn.commit()