如何回收PostgreSQL中未使用的LOB占用的空间



我有一个中等大小的数据库集群在PostgreSQL 8.3上运行。

数据库将数字文件(图像)存储为LOB。

数据库集群中有相当多的活动,许多内容都是以持续的方式创建和删除的。

即使承载OID的应用程序表由应用程序正确维护(当删除映像文件时),数据库集群的大小仍在持续增长。

自动吸尘处于活动状态,因此不应发生这种情况。

当应用程序表(包含OID)的行被删除时,LOB不会从数据库中删除。

这也意味着真空过程不会回收空间。

为了清除未使用的LOB,您在数据库上运行了VACUULO。Vacuumlo将从数据库中删除所有未引用的LOB。

示例调用:

vacuumlo -U postgres -W -v <database_name>

(我只包含了-v,使vacuumlo更加详细,这样您就可以看到它删除了多少LOB)

vacuumlo删除LOB后,您可以运行VACUUM FULL(或让自动真空过程运行)。

最新更新