Sql 版本表数据清理
auditversion列对于每个唯一id自动递增。版本对于相同id递增。对于新id,它从1开始 我计划写一个清理查询。要求是这样的 保留最新的30个版本 如果记录在2020-08-01某一天之后最后一次更新,请不要删除该记录。因此,在2020-08-01年之后,我们有可能会有超过30个版本的项目。 这就是我到目前为止所做的:Sql 版本表数据清理,sql,postgresql,Sql,Postgresql,auditversion列对于每个唯一id自动递增。版本对于相同id递增。对于新id,它从1开始 我计划写一个清理查询。要求是这样的 保留最新的30个版本 如果记录在2020-08-01某一天之后最后一次更新,请不要删除该记录。因此,在2020-08-01年之后,我们有可能会有超过30个版本的项目。 这就是我到目前为止所做的: CREATE TABLE audit_table ( id varchar(30) NOT NULL, auditversion int4 NOT NUL
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)
);
如果可以用更好的方式写,请告诉我。我觉得您的查询很好
您可以考虑的另一种方法是在INSERT或UPDATE上添加一个触发器,在每次数据修改时清除NeX.ID的旧条目。这可能是更大的工作量,但避免了一个长时间运行的DELETE语句。
谢谢。此表更新更频繁。因此,使用触发器可能会降低系统正常运行的速度。此删除将安排在低负载时间进行。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';