如何删除从Thingsboard旧的事件?

问题描述 投票:1回答:1

我应该怎么做才能正常删除Thingsboard“事件”词条?

据我所知,目前API不提供一种方式来删除事件。这似乎是唯一的办法就是直接删除数据库中的记录。

顺便说一句,我使用PostgreSQL作为数据库。

thingsboard
1个回答
0
投票

你的假设是正确的。您需要执行一个SQL脚本,以清理“事件”表。我必须指出,对Cassandra的DB我们已经有了“cassandra.query。ts_key_value_ttl”和“cassandra.query.events_ttl”配置参数来自动完成这个过程。


0
投票

两小时在Thingsboard源代码的研究后,我找到了解决办法。

日期是包含在V1 UUID格式uid_event领域。

因此,首先,你需要编写一个函数uuid_timestampin为了将UUID转换为时间戳。我找到了解决办法,在这里:https://stackoverflow.com/a/24191574/5300212

CREATE FUNCTION uuid_timestamp(id uuid) RETURNS timestamptz AS $$
  select TIMESTAMP WITH TIME ZONE 'epoch' +
      (((('x' || lpad(split_part(id::text, '-', 1), 16, '0'))::bit(64)::bigint) +
      (('x' || lpad(split_part(id::text, '-', 2), 16, '0'))::bit(64)::bigint << 32) +
      ((('x' || lpad(split_part(id::text, '-', 3), 16, '0'))::bit(64)::bigint&4095) << 48) - 122192928000000000) / 10000000 ) * INTERVAL '1 second';    
$$ LANGUAGE SQL
  IMMUTABLE
  RETURNS NULL ON NULL INPUT;

在此之后,删除所有事件超过30天前,你可以运行类似的查询:

DELETE FROM public.event WHERE uuid_timestamp(event_uid::uuid) < now() - '30 days'::interval;
© www.soinside.com 2019 - 2024. All rights reserved.