收尾:验收脚本自动清死元组、城市圈首末到访按可见到访算、补使用说明
verify.sh:测试库 ≥ VACUUM_MIN_MB(默认 200MB)时先 VACUUM (ANALYZE)——一轮全量会留几百 MB 死元组,级联删除随之变慢(同一夹具用例实测 13.6s → 10.2s)。只用普通 VACUUM:FULL 要 ACCESS EXCLUSIVE 锁,有别的服务连着测试库时会把验收整段卡住。 /api/cities 的首末到访改成按可见到访的到达时间算(内层 min/max(v.arrival)),不再取 places.first/last_visit_at——那两列是全量的,会被已并入 / 子段的到访推早推晚。 README 补两节:「数据编辑页上的重复到访」(判定口径与清理范围)、「为什么有些到访在页面上看不到」 (已并入 / 子段不计入显示与统计,但导出必须原样带着),并在开发提示里记下验收环境的死元组与 is_active 两个坑。 回归:city_agg_test.go 补了一段能区分的断言——把某地点最晚那次到访标成已并入后,城市最近到访 必须从 09-13 退到 09-08(原先只比对同口径时,两种算法在夹具数据上结果一样,是条假绿的断言)。
This commit is contained in:
@@ -956,7 +956,10 @@ func (s *Server) apiCityAgg(w http.ResponseWriter, r *http.Request) {
|
||||
COALESCE(sum(pa.visits),0), count(*), COALESCE(sum(pa.dwell),0),
|
||||
min(pa.first_at), max(pa.last_at)
|
||||
FROM (
|
||||
SELECT p.id, p.city, p.province, p.lat, p.lon, p.first_visit_at AS first_at, p.last_visit_at AS last_at,
|
||||
SELECT p.id, p.city, p.province, p.lat, p.lon,
|
||||
-- 首末到访按**可见到访**的到达时间算,不取 places 列值(那两列是全量,
|
||||
-- 会被已并入 / 子段的行推早推晚),与 visit_count 之类的口径保持一致
|
||||
min(v.arrival) AS first_at, max(v.arrival) AS last_at,
|
||||
count(*) AS visits,
|
||||
COALESCE(sum(LEAST(COALESCE(v.duration_min,0),10080)),0) AS dwell
|
||||
FROM places p
|
||||
|
||||
Reference in New Issue
Block a user