判据只在 SQLite 上跑过:把 MIN(read_at) 扫进 sql.NullString 在 PG 上依赖驱动返回类型, 不可靠。改成 CAST(... AS TEXT) 再解析,并把 PG 的文本形态(+00 时区后缀)加进可识别的 layout 列表。认不出来时退回现在= 把当下已有的已读邮件全算作迁移前 —— 首次升级时 正是对的,且有一次标记守着不会反复跑。
判据只在 SQLite 上跑过:把 MIN(read_at) 扫进 sql.NullString 在 PG 上依赖驱动返回类型, 不可靠。改成 CAST(... AS TEXT) 再解析,并把 PG 的文本形态(+00 时区后缀)加进可识别的 layout 列表。认不出来时退回现在= 把当下已有的已读邮件全算作迁移前 —— 首次升级时 正是对的,且有一次标记守着不会反复跑。