2016-06-09 63 views
0

我在存储库中存储了由调度程序生成的一些PDF导出。 36小时后,我需要删除这些PDF文件。使用触发器在postgres中插入后36小时删除记录

表1
ID(表2的PK),FILE_TYPE,数据

表2
ID,名称,标签,CREATED_DATE,updated_date

现在我怎么能写一个触发器,它可以删除记录表1表2 36小时后。

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

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(); 
+2

您将有较少的问题与删除旧的条目,而不是插入的触发器每小时批处理作业。使用触发器,如果​​没有插入,数据库不会得到所需的维护,并且如果由于任何原因删除失败,则插入将失败(如果不处理异常)或显着减慢。 –

回答

0

大家好我得到的,而不是用我用pgAgent和配置触发的解决方案。
如果任何人面临的问题,同时从默认的数据库调度分开(即Postgres的),那么,在步骤,ConnectionType应该远程,连接字符串应该是IP地址,而不是本地主机,指定密码,并提供数据库名称。请参考图片

enter image description here