首页 > 解决方案 > 检查当前时间和存储的时间值之间的差异是否大于固定值

问题描述

设置:许多设备(arduino,没关系)连接到我的数据库以更新它们的当前状态:电压、温度等......和 ​​last_update 列。

我想做的是知道设备何时离线。这意味着当 current_time-last_update 优于假设 10 秒(恒定值)时,我可以将“device_state”更新为“offline”

什么是最好的最佳方式来做到这一点。我发现的最佳方法是创建一个作业,每分钟左右选择 last_update 超过 10 秒的所有设备。有没有更好的办法?

这是一个带有 Web 前端的监控系统。我需要实时(或几乎实时)知道哪些设备处于离线状态。

谢谢

标签: sqlpostgresql

解决方案


您可以使用视图实现此功能:

create view v_t as
    select t.*,
           ( last_update < now() - interval '10 second' ) as is_offline
    from t;

当您查询视图时,该列将自动更新。

许多数据库支持计算列。Postgres 还不是其中之一。

还有一种使用函数的方法可以做一些非常相似的事情(详见此处)。


推荐阅读