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