fix(tradein/data): external_valuations.house_id — резолв в write-path + идемпотентный бэкфилл (#2236) #2263

Merged
lekss361 merged 2 commits from fix/tradein-extval-house-id into main 2026-07-03 06:40:23 +00:00
Showing only changes of commit c2096249d5 - Show all commits

View file

@ -165,21 +165,21 @@ def _process_row(
stats.bump(row.source, "processed") stats.bump(row.source, "processed")
try: try:
if dry_run: # SAVEPOINT в обеих ветках: даже в dry-run matcher бьёт по БД (SELECT'ы),
# и его exception на реальной сессии перевёл бы транзакцию в aborted →
# каскад «current transaction is aborted» на всех последующих строках.
with db.begin_nested():
house_id = matcher(db, row.address) house_id = matcher(db, row.address)
else: if house_id is not None and not dry_run:
with db.begin_nested(): db.execute(
house_id = matcher(db, row.address) text(
if house_id is not None: "UPDATE external_valuations "
db.execute( " SET house_id = CAST(:hid AS bigint) "
text( " WHERE id = CAST(:eid AS bigint) "
"UPDATE external_valuations " " AND house_id IS NULL"
" SET house_id = CAST(:hid AS bigint) " ),
" WHERE id = CAST(:eid AS bigint) " {"hid": house_id, "eid": row.id},
" AND house_id IS NULL" )
),
{"hid": house_id, "eid": row.id},
)
if house_id is not None: if house_id is not None:
stats.resolved += 1 stats.resolved += 1