使用触发器插入postgres后36小时删除记录

时间:2016-06-09 18:00:24

标签: postgresql triggers

我已在存储库中存储了一些由调度程序生成的PDF导出。 36小时后,我需要删除这些PDF。

表1
id(table2的pk),file_type,data

表2
id,name,label,created_date,updated_date

现在我如何编写一个触发器,可以在36小时后删除 Table1 Table2 中的记录。

我已经写了这个,但它只在插入完成时执行。即使没有发生偶数,我也希望它能够运行。

CREATE OR REPLACE FUNCTION ContentResource_Delete() RETURNS trigger AS $ContentResource_Delete$

BEGIN
    delete from jicontentresource jicr USING  jiresource jir 
    where jicr.id = jir.id and jicr.file_type='pdf' and trunc(EXTRACT(EPOCH FROM now() - creation_date)/3600) >=1 ;
    delete from jiresource where name like '%.pdf' and trunc(EXTRACT(EPOCH FROM now() - creation_date)/3600) >=1 ;   
    RETURN NULL;
END;$ContentResource_Delete$ LANGUAGE plpgsql;

CREATE TRIGGER ContentResource_Delete AFTER INSERT ON jiresource FOR EACH ROW EXECUTE PROCEDURE ContentResource_Delete();

1 个答案:

答案 0 :(得分:0)

大家好我得到了解决方案,而不是使用触发器我已经使用了pgAgent并进行了配置。
如果有人在默认数据库(即postgres)之外的时间安排问题,那么在步骤中, ConnectionType 应该是远程,连接字符串应该是 IP地址而非 localhost ,请指定密码并提供数据库名称。参考图像

enter image description here