【发布时间】:2018-05-30 15:51:36
【问题描述】:
嗨,我最近开始探索 pgAgent。安装和测试已经完成。然而,关于 pgAgent 有一件事情困扰着我。这个东西只会运行 SQL 或批处理代码。
假设,在我的数据库表中包含不同的周数数据。出于维护目的,该表应仅存储过去 2 周的数据。 pgAgent 是否能够自动执行此任务。
工作流程将是:
1)Get System timestamp
2)Calculate week Number
3)delete * from table where week= week - 3
如果可以做到这一点,它会是批处理还是 SQL 类型?如果您能提供一些示例,我将不胜感激。
非常感谢。
CREATE OR REPLACE FUNCTION weekno() RETURNS void AS $$
DECLARE weekno INTEGER;
BEGIN
weekno := select extract(week from (select current_timestamp));
RAISE NOTICE '%', weekno;
END;
$$ LANGUAGE plpgsql;
SELECT weekno();
delete * from mytable where week=weekno();
例如,假设 select extract(week from (select current_timestamp)) 返回 22,则必须删除包含第 19 周数据的行。
Week Person Total Overtime Hours
19 Belle 12
19 Anthony 10
19 Boss 0
20 Anthony 15
20 Boss 0
20 Belle 5
21 Anthony 20
21 Belle 10
21 Boss 0
22 Anthony 25
22 Belle 8
22 Boss 0
【问题讨论】:
-
创建或替换函数 weekno() 返回 void AS $$ DECLARE weekno INTEGER; BEGIN weekno := select extract(week from (select current_timestamp)); RAISE NOTICE '%', weekno;结尾; $$ 语言 plpgsql;选择周号(); @Vao Tsun 很抱歉给您带来不便,我无法在此示例中包含任何空格或 Enter
-
这是我在 SQL 端的方法,但也许窗口批处理脚本也可以做类似的事情。这就是为什么我没有在问题中包含代码的原因,因为我对 SQL 和窗口批处理文件方法都持开放态度。获得周数后,我可以从包含周数数据的表中删除行 - 3
-
@VaoTsun 帖子已被编辑,请参考编辑后的帖子,这可以在 linux crontab 中轻松完成,但是对于 pgAgent,我对如何做到这一点有点困惑。