0

我有一个 TimescaleDB 数据库,其中几个表中的一些时间戳不正确 - 我无意中给 TO_TIMESTAMP() 函数指定了毫秒数数,而不是秒数。因此,自 1970 年以来,所有这些数据点都比应有的时间长 1000 倍。通过在 where 子句中检查未来日期,我可以轻松地隔离出哪些行需要修复,但我对如何转换和替换这些不正确的时间戳有点困惑。我基本上需要获取 unix 时间表示,将其除以 1000,然后替换该行中的值,但是我的 SQL 太生疏了,无法将这个查询拼凑在一起。

我看到我可以使用 extract(epoch from ) 来获取秒数,但是我不清楚如何对每一行执行此操作,然后更新其时间戳。

编辑:

使用查询时:

UPDATE table_name
SET time = TO_TIMESTAMP(extract(epoch from time) / 1000.0)
WHERE
   time > '2020-01-01 00:00:00';

我得到错误:

关系“_hyper_8_295_chunk”的新行违反了检查约束“constraint_295”

4

1 回答 1

1

我认为最好创建一个新的超表并运行插入到从旧超表到新超表的选择中。或者可能分批进行。这是因为 Timescale 限制了分区键的更新,因此项目不会在分区之间移动。您可以先删除然后再插入以使其工作类似,但是创建一个新的超表,使用正确的时间戳移动所有内容然后重命名比尝试进行更新等更有效。

于 2019-06-27T14:52:40.363 回答