Slim Asked: 2023-04-20 17:48:27 +0800 CST2023-04-20 17:48:27 +0800 CST 2023-04-20 17:48:27 +0800 CST 是否有可能通过在每条记录上添加一个空的 jsonb 属性,将一个已经很大的 jsonb 表的大小增加一倍?与 postgres 12.7 772 我们在包含大 jsonb 的表上运行迁移。 “只是”在 jsonb 中添加了一个新属性:"someAttribute": null在每一行中都添加了。 这次迁移后,“table_size”增加了很多:从 20GB 到 50GB 这是正常的? 这些图表显示了表大小、死行和自动清理: 试图查看TOAST 行为、清理或物理存储工作。 postgresql 1 个回答 Voted Best Answer Laurenz Albe 2023-04-20T23:56:48+08:002023-04-20T23:56:48+08:00 当您更新 PostgreSQL 中的行时,该行的旧版本保留在表中,并添加新版本。因此,如果您更新所有行,表大小将大约翻倍。 有两种方法: 批量更新后,运行 VACUUM (FULL) tab; 但请注意,在该操作期间无法访问该表。 像这样分批运行更新 UPDATE tab SET ... WHERE id BETWEEN 1 AND 10000; 在每批之后,运行 VACUUM tab; 从表中删除旧数据。这VACUUM不会减少表的大小,但会释放旧的行版本,并且该空间可以被下一批重新使用。
当您更新 PostgreSQL 中的行时,该行的旧版本保留在表中,并添加新版本。因此,如果您更新所有行,表大小将大约翻倍。
有两种方法:
批量更新后,运行
但请注意,在该操作期间无法访问该表。
像这样分批运行更新
在每批之后,运行
从表中删除旧数据。这
VACUUM
不会减少表的大小,但会释放旧的行版本,并且该空间可以被下一批重新使用。