2013-10-27 40 views
9

我有一個PostgreSQL數據庫,其中一個錶快速增長非常大(每月大約數百萬行),所以我想定期將該表的內容歸檔到單獨的表中。在PostgreSQL獲取一個月前的時間戳

我打算使用cron作業每夜執行一個.sql文件,將所有超過一個月的行存檔到另一個表中。

我的查詢工作正常,但我需要知道如何動態創建一個月前的時間戳。

time列以2013-10-27 06:53:12格式存儲,我需要知道在SQL查詢中使用什麼來構建恰好一個月前的時間戳。例如,如果今天是2013年10月27日,我想查詢匹配的所有行時間< 2013-09-27 00:00:00

+1

「時間列以2013-10-27 06:53:12格式存儲」 - 您應該使用['timestamp'列](http://www.postgresql.org/docs/current/interactive /datatype-datetime.html),而不是一個格式化的字符串,因爲它會使事情變得更容易和更高效。 – IMSoP

+0

「30天」比「一個月」更精確,「恰好一個月」基本上沒有意義。在SQL中,如果從2013-03-28,03-29,03-30和03-31中減去恰好一個月,並且您得到相同的答案:2013-02-28。這很重要嗎? –

+0

@IMSoP不幸的是,我無法控制數據庫結構。我正在運行Quassel IRC Core,並且在積壓表中有1,800萬行導致客戶端加載非常緩慢,所以爲了維持客戶端穩定性,我需要對除近期行之外的所有行進行歸檔。 –

回答

18

問題是在IRC回答的朋友:

'now'::timestamp - '1 month'::interval

具有時間戳回報00:00:00並不可怕重要的,所以這個工作對我的意圖。

+2

+1這個人也在Redshift中工作 – fortran

26
select date_trunc('day', NOW() - interval '1 month') 

該查詢將從現在又一圈的時間返回日期在一個月前爲00:00:00。

+1

請注意,這將返回一個實際的時間戳;從問題的措辭來看,實際的列有一個字符串,所以你需要將它轉換爲比較:'WHERE CAST(「time」as timestamp) IMSoP