这个坑值得记一笔。知识库同步脚本按 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 混用是最隐蔽的漏更原因,日志里要打出两边的值。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189