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

标签 postgresql lob vacuum

我有一个在 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/

相关文章:

java - BerkeleyDB 中的 LOB

oracle - 与多行选择合并

python - postgresql 中的动态数据

sql - 为什么 $dbh->do ('VACUUM' ) 在 Perl 的 DBD::SQLite 中失败?

sql - 是否可以通过 postgresql 中的 where 子句指定限制?

sql - 使用 SQL 函数而不是 SELECT 的优势

c++ - OCI 预取不工作

postgresql - 真空满后释放内存?

python - Django 1.9.1 prefetch_related 仅多次命中数据库

postgresql - 我如何将本地 PostgreSQL 数据库复制到 Heroku for Spring Boot 应用程序