如何从 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;
我应该怎么做才能从 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;