You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js写入QuestDB时Timestamps显示为1970年问题咨询

问题根本原因

Date.now()返回的是毫秒级的数值型Unix时间戳,插入环节的类型适配出错触发了时间计算异常,最终显示为1970年,常见的两种适配问题如下:

  • 你使用的数据库(此处为QuestDB)的TIMESTAMP类型默认要求传入秒级Unix时间戳、微秒级时间戳或者标准日期对象,直接传入毫秒级数值会被按错误精度解析,计算后的时间接近1970年
  • Node.js的pg客户端不会自动将数值型时间戳转换为数据库兼容的TIMESTAMP格式,部分场景下大数值的毫秒时间戳会被截断为32位整数,溢出后数值接近0,对应时间就是1970年
可行解决方案

你可以任选以下一种方案修改:

  • 直接传入Date对象而非数值:将参数中的Date.now()替换为new Date(),pg客户端会自动将Date对象序列化为符合数据库要求的TIMESTAMP格式,无需手动处理精度
const insertData = await client.query(
  "INSERT INTO measurements VALUES($1, $2, $3);",
  [new Date(), sensor_id, sensor_reading],
)
  • 按数据库精度转换时间戳数值:如果需要手动传入数值时间戳,根据字段精度调整:
    • 字段为秒级TIMESTAMP:Date.now() / 1000
    • 字段为QuestDB默认微秒级TIMESTAMP:Date.now() * 1000
  • 直接使用数据库侧生成的时间:修改SQL语句直接调用数据库内置的当前时间函数,可同时避免客户端与服务端时钟不一致的问题
const insertData = await client.query(
  "INSERT INTO measurements VALUES(now(), $1, $2);",
  [sensor_id, sensor_reading],
)
额外优化建议

你当前代码中没有手动开启事务的BEGIN语句,pg客户端默认开启自动提交,额外执行的COMMIT语句属于冗余操作,可以删除。

内容的提问来源于stack exchange,提问作者BurningFlan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:48:02