首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >版本表数据清理

版本表数据清理
EN

Stack Overflow用户
提问于 2020-09-15 01:34:06
回答 1查看 27关注 0票数 0
代码语言:javascript
复制
CREATE TABLE audit_table (
    id varchar(30) NOT NULL,
    auditversion int4 NOT NULL,
    value jsonb NOT NULL,
    delta text[] NULL,
    src text NOT NULL,
    usr text NOT NULL,
    meta hstore NULL,
    last_updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT audit_table PRIMARY KEY (id,auditversion)
);

每个唯一的id都会自动递增auditversion列。对于同一个id,版本会增加。对于新的Id,它从1开始。

我计划写一个清理查询。要求是这样的

  1. 保存最新的30个版本,如果记录是在2020年-08-01之后更新的,则
  2. 不会删除该记录。因此,在2020-08-01之后,我们有可能超过30个版本。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
delete from audit_table pa
using (select id,  MAX(a.auditversion) as maxVersion 
       FROM audit_table a group by id) pm 
where pm.id = pa.id
  and pa.auditversion <= (pm.maxVersion-30)
  and pa.last_updated < '2020-08-01';

如果可以用更好的方式写,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-15 01:54:36

你的问题在我看来不错。

您可以考虑的另一种方法是添加一个触发器ON INSERT OR UPDATE,在每次数据修改时清除NEW.id的旧条目。这可能是更全面的努力,但避免了一个长时间运行的DELETE语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63893832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档