从 node.js 写入时,QuestDB 中的时间戳显示为 1970

Timestamps showing as 1970 in QuestDB when writing from node.js

我有一个 table 看起来像:

timestamp sensor reading
ts1 sensor name 123

我正在写入数据的脚本的主要部分如下所示:

const run = async () => {
  try {
    const client = new Client({
      database: "qdb",
      ...
    })
    await client.connect()
    // read sensors
    ...
    const insertData = await client.query(
      "INSERT INTO measurements VALUES(, , );",
      [Date.now(), sensor_id, sensor_reading],
    )
    await client.query("COMMIT")

    await client.end()
  } catch (e) {
    console.log(e)
  }
}

run()

传感器 ID 和测量值看起来不错,但时间戳都是 1970 年,日期插入有什么问题?

QuestDB 本身具有微秒分辨率时间戳。 Date.now() 创建毫秒分辨率的时间戳。

如果不介意精度损失,直接乘以1000即可:

    const insertData = await client.query(
      "INSERT INTO measurements VALUES(, , );",
      [Date.now() * 1000, sensor_id, sensor_reading],
    )

如果你有高吞吐量或者对精度有要求,可以使用microtime包:

https://www.npmjs.com/package/microtime