TDengine是否支持插入时间戳远早于当前时间的数据?
问题结论
这不是TDengine的bug,是默认数据库配置限制导致的。
报错原因
TDengine为了优化时序数据的写入、查询性能以及存储成本,默认对写入数据的时间戳范围做了约束:
- 时间戳最早不能早于「当前时间减去数据库配置的
KEEP参数值」,KEEP参数默认值为3650天(10年) - 时间戳最晚不能晚于「当前时间往后推10年」
你尝试插入的1970年时间戳远早于默认的时间下限,因此触发了时间戳超出范围的报错。
另外需要注意时间精度匹配问题:如果数据库创建时指定的时间精度是毫秒/微秒,你输入的数值1会被识别为1毫秒/1微秒,同样属于1970年的时间范围,也会触发同样报错。
解决方法
新建数据库场景
创建数据库时根据你的数据时间范围需求,指定足够大的KEEP参数,同时匹配你的时间戳精度:
# 示例:保留100年数据,时间精度为秒 CREATE DATABASE your_db_name KEEP 36500 PRECISION 's';
已有数据库场景
直接调整现有数据库的KEEP参数即可,注意该参数只能调大不能调小:
ALTER DATABASE your_db_name KEEP 36500;
调整完成后再执行插入语句即可成功写入1970年的时间戳数据。
内容的提问来源于stack exchange,提问作者GeorgeWill93
相关产品推荐
相关产品推荐

