首页 > 解决方案 > 如何从 postgresql 数据库表中删除不必要的记录

问题描述

我有一张包含我的表格版本的表格。

version_id     transaction    entity_id    date
--------------------------------------------------------------
1              insert         1            11.11.2019 13:15:04
2              update         1            11.11.2019 13:16:04
3              insert         8            11.11.2019 13:17:04
4              update         1            11.11.2019 13:18:04
5              update         8            11.11.2019 13:19:04
6              update         1            11.11.2019 13:20:04
7              update         1            11.11.2019 13:21:04
8              delete         1            11.11.2019 13:22:04

例如实体 id 1,我需要 1,7,8 个版本号。不需要2,4,6版本号,所以我可以删除它们。实际上,我需要最后一次插入、更新、删除实体的事务版本号。其他将删除。

我可以通过这种方式删除所有不必要的更新 id 吗?

标签: sqlpostgresql

解决方案


我需要一个实体的最后插入、更新、删除事务版本号。

您可以使用以下方法删除行:

delete from version v
    where v.version_id < (select max(v2.version_id)
                          from versions v2
                          where v2.entity_id = v.entity_id and
                                v2.transaction = v.transaction
                         );

推荐阅读