fix(tradein/data): external_valuations.house_id — резолв в write-path + идемпотентный бэкфилл (#2236) #2263
1 changed files with 14 additions and 14 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue