2016-01-04 30 views
1

我正在嘗試爲小型腳本編寫單元測試,該腳本從PostgreSQL數據庫表中刪除所有超過6個月的條目。該腳本執行以下查詢。將CURRENT_DATE設置爲Postgresql中的常量以進行單元測試

DELETE FROM some_table WHERE tstamp < (CURRENT_DATE - INTERVAL '180 days'); 

腳本是Python和我使用testing.postgresql創建本地臨時數據庫實例,我可以自由地操縱。我遇到的問題是我無法找到一種方法強制CURRENT_DATE成爲一個常量值,這樣我就可以創建在某個日期之前和之後的測試條目,並且在測試稍後運行時不會更改。

是否可以重寫PostgreSQL數據庫中的CURRENT_DATE以始終返回預定義的時間?

+0

創建一個函數someSchema.current_date(),返回任何內容,然後將該模式提前公開在您的搜索路徑中 –

回答

2

您無法更改CURRENT_DATE,CURRENT_TIMESTAMP。你的問題是平常的,而且通用的解決方案很簡單 - 在沒有任何這些僞變量的情況下在你的代碼之間破壞你的代碼。

所以功能/查詢

DELETE FROM some_table WHERE tstamp < (CURRENT_DATE - INTERVAL '180 days'); 

是不可測的,但功能

CREATE OR REPLACE FUNCTION delete_180days(_to_date date) 
RETURNS void AS $$ 
    DELETE FROM some_table 
    WHERE tstamp < ($1 - INTERVAL '180 days') 
$$ LANGUAGE sql; 

現在,我可以寫試驗功能delete_180days。在應用程序中,我可以使用它SELECT delete_180days(CURRENT_DATE)

相關問題