我刚刚删除了存储在用户表中一个 jsonb 中的大部分数据(不再需要它),并在该列中保留一个 id。我希望通过此操作释放大量磁盘空间。
UPDATE users SET my_jsonb = '{id: xxxx }';
问题是当我尝试查看磁盘中的可用空间时保持不变
/dev/md125 935G 501G 387G 57%
还有表
Table Size External
users | 497 GB | 478 GB
我的最后一个选择是尝试 aVACUUM FULL users
但是由于该表用于生产环境,因此将其锁定一段未知的时间并不方便。
我在 CENTOS RHEL7 机器上运行 postgres 10.5 数据库。
一个普通的 VACUUM 将为新数据(即其他 TOASTed JSON 数据)提供可用空间。
如果您真的想将可用空间还给操作系统,并且您无法负担排他锁,请尝试pg_repack:
它仍然需要足够的空间来存放原始表和新副本。