这个坑值得记一笔。知识库同步脚本按 updated_at 大于 last_sync 拉增量,服务器时区是 UTC,数据库字段存的是本地时间,每天固定漏掉最近 8 小时修改的文档,第二天才补上。
刚开始盯着「跨时区部署后两边的当前时间不一致」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。数据库字段没有时区,脚本却按 UTC 比较;last_sync 存的是本地时间字符串;同步窗口按天切,边界上的文档被跳过。
动手时先确认两边时区与字段类型
psql -c 'show timezone; select now(), updated_at from docs limit 1'
随后统一成带时区的时间再比较
psql -c "select * from docs where updated_at > '2026-11-12 00:00:00+08'"
last_sync 改成存 UTC 时间戳
python -c "import time;print(int(time.time()))"
回补最近 24 小时的文档验证不漏
python sync.py --since-hours 24
别只看报错消失,验证要多做一步。改一篇文档后五分钟内能被检索到,跨零点的时间段没有漏更,同步条数与数据库统计一致。
增量同步的时间比较必须带时区,本地时间与 UTC 混用是最隐蔽的漏更原因,日志里要打出两边的值。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
