我有一个巨大的表,我无法删除行,只能更新存储大量 base64 数据的列,我应该将其更新为 null 以尝试释放空间。
所以我编写了一个脚本,它能够在 base64 中设置所有图像,期望在 Vacuum 之后释放空间!
图像设置为 null,执行真空,但表仍然具有完全相同的大小,我很确定必须立即释放空间,所以我做错了什么?
真空完全能够从我更新为空的巨大 varchar 数据中释放空间吗?(因为如果我要这样做,我需要锁定桌子,我需要确定)
转储大小减少了 10 倍,因此我预计数据库大小会有类似的行为。
简短的回答 - 是的。
更新行时,您会为表中保存的每一行创建一个新版本。
它确实使这些“死”行占用的空间可供重用,但这并不会减少整体大小。
这就是将空间释放回操作系统的原因。
是的; 发生这种情况时,表将被锁定。
请参阅PostgreSQL Wiki页面上的“Vacuum Full”。