我刚刚删除了我的用户表中存储在一个jsonb中的大部分数据(不再需要),只需在该列中保留一个id即可。我期望通过这个操作释放出大量的磁盘空间。
UPDATE users SET my_jsonb = '{id: xxxx }';问题是,当我试图看到磁盘中的空闲空间保持不变时
/dev/md125 935G 501G 387G 57%
还有那张桌子
Table Size External
users | 497 GB | 478 GB我的最后一个选择是尝试一个VACUUM FULL users,但是由于这个表是在生产环境中使用的,所以不方便地锁定它,因为它占用了大量的时间。
我在CENTOS RHEL7机器上运行Postgres10.5数据库。
发布于 2019-08-22 07:16:45
普通的真空将为新数据(即其他TOASTed JSON数据)提供可用的空间。
如果您真的想将空闲空间还给操作系统,并且您负担不起独占锁,请尝试pg_雷帕克:
要执行全表重新包装,pg_repack将:
它仍然需要足够的空间为原始表和新的副本。
https://dba.stackexchange.com/questions/245965
复制相似问题