2016-06-09 60 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