0

我有一个非常简单的数据库模型,两个表:对象数据,以 1:n 关系链接。

每分钟,对于每个对象,都会保存一个新数据。有趣的属性是:object_id (int)、created_at (timestamp) 和value (varchar)。Object_idcreated_at用作复合 PK)

我的问题是它产生了太多的数据。我正在尝试找到一种有效的方法来定期对数据进行下采样。我需要做什么 :

  • 上周不要碰 X
  • 每个对象每 Y 分钟只保留一个值。

我对 plpgsql 不太熟悉,我强烈怀疑 date_trunc 和/或包含该日期的复合 PK 有什么聪明的事情要做......

pgsql 9.4.10

4

1 回答 1

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
于 2017-07-12T10:11:20.183 回答