2017-07-12 66 views
0

我有一個非常簡單的數據庫模型,兩個表:對象數據,與1:n關係鏈接。降採樣postgresql表

每分鐘,對於每個對象,保存一個新的數據。有趣的屬性是:object_id(int),created_at(timestamp)和value(varchar)。 OBJECT_IDcreated_at用作複合PK)

我的問題是,它產生了太多的數據。我試圖找到一種有效的方法來定期下載數據。我需要做什麼:

  • 不碰X上週
  • 每Ÿ分鐘只保留一個值,爲每個對象。

我不太熟悉PLPGSQL和我強烈懷疑,有一些聰明的做date_trunc和/或含該日起我複合PK ......

的pgsql 9.4.10

回答

1
delete from data 
where 
    (
    -- year of `created_at` is less then current year 
    extract('year' from created_at) < extract('year' from current_date) 
    or 
    -- year of `created_at` is equal to current year 
    extract('year' from created_at) = extract('year' from current_date) 
    and 
    -- number of week of `created_at` is less then current week by 3 or more 
    extract('week' from current_date) - extract('week' from created_at) >= 3 
    ) 
and 
    -- number of minutes is not a multiple of 10 
    extract('minute' from created_at)::int % 10 <> 0 
+0

這是不是意味着在年初,不到3周的記錄會被刪除? –

+0

@DanGetz - 對,謝謝。更新。 – klin

+0

感謝點提取功能,很好的例子! –