-
fix(sync): 补 patient_transactions 缺失的 source_event_id partial UNIQUE · bf921bbc
🔴 预存 bug:schema 注释一直声称有 partial UNIQUE 幂等键,但 init migration 从没真正建过 → source_event_id 幂等从未在 DB 层强制: - createMany({skipDuplicates:true}) 一直是空操作(无约束可依据,全插入) - per-row create 的 P2002 catch 永不触发 - 重复导入 / 同源 dup 行 → 产生重复 patient_transactions 发现过程:PR5b 并行测试做完整性自查,发现 12 个重复 source_event_id (都是 fact_appointment_out 里同 appointment 同时间戳的真重复行)。 查 \d patient_transactions 确认无 unique index,查 init migration 确认从没建。 注:fact 层的 (subject_id, version) UNIQUE 是真建了的,所以 fact 没坏 (自查 multi_active_facts=0 验证),只有 tx 层有重复风险。 migration 20260528000002: 1. dedup 已有重复(每组保留 event_seq 最小 = 最早写入) 2. 建 partial UNIQUE (host_id, tenant_id, source_event_id) WHERE NOT NULL 本地验证: dedup: 4330 → 4318(删 12 重复),remaining_dups=0 加约束后重跑并行:txns=4318 dups=12(constraint 正确拦截 12 重复 skip) DB 终态:0 dup_source_events / 0 multi_active_facts → createMany skipDuplicates 现在真正生效;幂等在 DB 层强制luoqi committed
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| migrations | Loading commit data... | |
| schema.prisma | Loading commit data... | |
| seed.ts | Loading commit data... |