gpt4 book ai didi

postgresql - 从表中清理文件而不删除 postgresql 9.6.3 中的行

转载 作者:行者123 更新时间:2023-11-29 13:13:06 25 4
gpt4 key购买 nike

我有一个包含文件的表以及与该表的各种关系,文件存储为 bytea。我想释放旧文件占用的空间(根据时间戳),但这些行仍应存在于表中。

null设置为bytea字段就足够了吗?这样真的会把数据从表中删除吗?

最佳答案

在 PostgreSQL 中,更新一行会创建一个新的元组(行版本),而旧的元组将被 autovacuum 删除。

此外,较大的bytea 属性将被离线存储在TOAST 中。属于该表的表。

当您将 bytea 属性设置为 NULL(这是正确的做法)时,会发生两件事:

  • 由于 UPDATE 创建的所有新元组,主表将变得更大。 Autovacuum 将释放空间,但不会收缩表(空的空间可以被 future 的数据修改重新使用)。

  • TOAST 表中的条目将被删除。同样,autovacuum 将释放空间,但表不会缩小。

所以您实际上会观察到,在 UPDATE 之后,您的表使用了比以前更多的空间

您可以通过在表上运行 VACUUM (FULL) 来清除所有空白空间,但这会在操作期间阻止对表的并发访问,因此请准备好安排一些停机时间(无论如何,您可能会为 UPDATE 这样做)。

关于postgresql - 从表中清理文件而不删除 postgresql 9.6.3 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52400979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com