当应用程序表(包含OID)的行被删除时,LOB不会从数据库中删除。
我有一个中等大小的数据库集群在PostgreSQL 8.3上运行。
数据库将数字文件(图像)存储为LOB。
数据库集群中有相当多的活动,许多内容都是以持续的方式创建和删除的。
即使承载OID的应用程序表由应用程序正确维护(当删除映像文件时),数据库集群的大小仍在持续增长。
自动吸尘处于活动状态,因此不应发生这种情况。
这也意味着真空过程不会回收空间。
为了清除未使用的LOB,您在数据库上运行了VACUULO。Vacuumlo将从数据库中删除所有未引用的LOB。
示例调用:
vacuumlo -U postgres -W -v <database_name>
(我只包含了-v,使vacuumlo更加详细,这样您就可以看到它删除了多少LOB)
vacuumlo删除LOB后,您可以运行VACUUM FULL(或让自动真空过程运行)。