加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL根据某字段取平均值后插入另外字段实现一例

发布时间:2020-12-13 17:15:07 所属栏目:百科 来源:网络整理
导读:在做服务器负载状态监控的时候,为了避免负载峰值而造成无用报警的问题,我用的办法是取最近10次负载的平均值。之前这个需求直接在django中用程序解决,不过运行一段时间后速度不是很理想。现在解决的思路是先在插入新数据的时候让数据库把负载计算好放在另

在做服务器负载状态监控的时候,为了避免负载峰值而造成无用报警的问题,我用的办法是取最近10次负载的平均值。之前这个需求直接在django中用程序解决,不过运行一段时间后速度不是很理想。现在解决的思路是先在插入新数据的时候让数据库把负载计算好放在另外一个字段,然后在django中删除计算每台服务器负载平均值的代码,负载值改成直接读取平均值。因为数据库服务器现在压力不大,增加触发器后对性能的影响这些就没怎么考虑。

计算平均值

PostgreSQL计算平均值的sql类似如下:

withsas(selectcast(load_15asfloat)fromasset_serverstatuswheresid_id=10orderbyiddesclimit10)selectavg(load_15)froms

触发器函数

CREATEORREPLACEFUNCTIONfn_status_loadavg_insert()
RETURNStriggerAS
$BODY$
BEGIN
updateasset_serverstatussetload_avg=(
withsas(selectcast(load_15asfloat)fromasset_serverstatuswheresid_id=new.sid_idorderbyiddesclimit10)selectavg(load_15)froms
)whereid=new.id;
returnnew;
END;
$BODY$
LANGUAGEplpgsqlVOLATILE
COST100;

用pgsql写了个触发器的函数,基本思路其实就是更新。

为表添加触发器

CREATETRIGGERtrg_status_loadavg_insert
AFTERINSERT
ONasset_serverstatus
FOREACHROW
EXECUTEPROCEDUREfn_status_loadavg_insert();

这样PostgreSQL数据库中根据某条件,取某字段的平均值,然后插入到另外一个字段的实现就完成了。

记录下。

原文地址:http://www.sijitao.net/2030.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读