我有一个在 PostgreSQL 8.3 上运行的中型数据库集群。
数据库将数字文件(图像)存储为 LOB。
数据库集群中有相当多的事件,不断创建和删除大量内容。
即使托管 OID 的应用程序表由应用程序正确维护(当删除图像文件时),数据库集群的大小仍在不断增长。
自动清理处于事件状态,因此不应发生这种情况。
最佳答案
当您的应用程序表(包含 OID)的行被删除时,LOB 不会从数据库中删除。
这也意味着空间不会被 VACUUM 进程回收。
为了摆脱未使用的 LOB,您在数据库上运行了 VACUUMLO。 Vacuumlo 将从数据库中删除所有未引用的 LOB。
调用示例:
vacuumlo -U postgres -W -v <database_name>
(我只包含了 -v 来让 vacuumlo 更冗长一点,这样你就可以看到它删除了多少 LOB)
在 vacuumlo 删除 LOB 后,您可以运行 VACUUM FULL(或让自动真空进程运行)。
关于postgresql - 如何回收 PostgreSQL 中未使用的 LOB 占用的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17327489/