如何从 Thingsboard 中删除旧事件?

How to remove old events from Thingsboard?

我应该怎么做才能从 Thingsboard 中正确删除 'event' 个条目?

据我所知,目前的API没有提供删除事件的方法。好像只能直接删除DB里面的记录了。

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

你的假设是正确的。您将需要执行 SQL 脚本来清理 "events" table。我必须注意,对于 Cassandra DB,我们已经有了 "cassandra.query. ts_key_value_ttl" 和 "cassandra.query.events_ttl" 配置参数来自动执行此过程。

在研究 Thingsboard 源代码两个小时后,我找到了解决方案。

日期以 V1 UUID 格式包含在 uid_event 字段中。

所以首先,您需要编写一个函数uuid_timestamp以便将 UUID 转换为时间戳。我在这里找到了解决方案:

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;