Commit Graph
1 Commits
Author SHA1 Message Date
tamakyi 40441ba900 工具:tools/dedup_site_visits.py —— 以手机包为参照清掉站点侧的历史重复到访
站点数据里有一批「到达时间 + 地点与手机包里某条完全相同、但 UUID 不同」的到访副本(站点侧生成的
UUID)。差异页/合并按 UUID 认人,于是它们被当成「备份新增」,导出到 rond 后就是成对的两条重复记录
(2026-09-29 站长实测:导入后 app 里出现成对的重复条目)。

工具以手机导出的包为参照(数据集的基线):
  * 站点到访的 UUID 在参照里能找到 → 保留(手机自己也有成对条目,那是合法的,不能动)
  * UUID 找不到、且 (到达时间, 地点) 与参照里某条一致 → 判为副本
副本的附属记录(位移/天气/留档)一并删除;若有别的到访的留档指向副本(ZMERGEDTO / ZPARENT),
改指到保留的那条,避免导出时留下悬空引用。**默认只预演,--apply 才动手。**

踩坑记录(都在此提交里修掉):
  * `raw->>` 取出的是 text,与数字比较会报「text = integer 操作符不存在」,导致工具在动手前整个退出;
  * 同一个 UPDATE 里不能给 raw 赋两次值(「对同一列 raw 进行了多次分配」),jsonb_set 要嵌套。

演练验证(本地真实数据:导入含 72 条副本的包 → 执行 → 核对):
  到访 1026 → 954、位移 833 → 809、天气 621 → 589(与手机包一致);
  「同时间同地点」重复组 101 → **31**(= 手机包自身)、悬空引用 0/0。
2026-09-29 17:38:50 +08:00