Database 用html将列更新为null可以节省空间吗?

Database 用html将列更新为null可以节省空间吗?,database,postgresql,Database,Postgresql,我们有一个很大的表,表中有一列,我们保存了应用程序发送的所有html。在几个月内,这张桌子增长了很多。我们有一个要求,HTML必须保存两个月。我们想在两个月后删除HTML,但我们不想删除该行,因为该行包含我们需要的信息 将列更新为null是否可以节省数据库空间? 如果答案是肯定的,我们需要做自动吸尘器吗 非常感谢 更新最初只会占用更多空间,因为每个元组都会编写一个新版本。在关闭所有足以查看旧数据的事务并完成真空填充之前,旧空间不会返回到操作系统。但在真空后,它可以在内部重复使用。这可能已经足够好

我们有一个很大的表,表中有一列,我们保存了应用程序发送的所有html。在几个月内,这张桌子增长了很多。我们有一个要求,HTML必须保存两个月。我们想在两个月后删除HTML,但我们不想删除该行,因为该行包含我们需要的信息

将列更新为null是否可以节省数据库空间? 如果答案是肯定的,我们需要做自动吸尘器吗


非常感谢

更新最初只会占用更多空间,因为每个元组都会编写一个新版本。在关闭所有足以查看旧数据的事务并完成真空填充之前,旧空间不会返回到操作系统。但在真空后,它可以在内部重复使用。这可能已经足够好了,但让它被重用确实意味着给定时间范围内的数据将分散在整个表中,而不是集中在一个部分

您是否经常使用这些html数据,还是只需要“以防万一”地保留它?如果是后者,也许您可以将其记录在数据库之外。然后在日志文件足够大时删除日志文件,或者在必要时使用file_fdw将其映射到数据库中

您可能希望按时间对数据进行分区,然后偶尔将除html之外的所有数据复制到一个新表中,以获得一个过时的时间范围,然后将较大的分区移出,将较小的分区移入


您还可以水平地对数据进行分区,将html放在自己的表中,其中只有一列是主键,它将html和其他逻辑行链接起来。然后使用前面提到的方法之一,一旦这些数据足够陈旧,就可以去除其中的大块数据。

html用于显示发送的电子邮件的“Web版本”,因此有一个常规用法。html为每个收件人都有额外的_字段uniques,并且我们在同一行中保存了一个带有这些额外字段的数组。想法是在两个月后删除html,如果用户想在两个月后看到web版本,则获取收件人的额外字段,并获取客户在活动中保存的最后一个html(保存在其他表中)。我们为每个收件人保存HTML,因为我们的用户可以在活动中发送不同版本的HTML。我们将使用cronjob每月删除一天的HTML,然后在此过程后,在表中执行“真空满”。