首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >烤面包的自由空间

烤面包的自由空间
EN

Database Administration用户
提问于 2019-08-22 07:07:00
回答 1查看 404关注 0票数 0

我刚刚删除了我的用户表中存储在一个jsonb中的大部分数据(不再需要),只需在该列中保留一个id即可。我期望通过这个操作释放出大量的磁盘空间。

代码语言:javascript
运行
复制
UPDATE users SET my_jsonb = '{id: xxxx }';

问题是,当我试图看到磁盘中的空闲空间保持不变时

/dev/md125 935G 501G 387G 57%

还有那张桌子

代码语言:javascript
运行
复制
 Table                                            Size        External
 users                                          | 497 GB     | 478 GB

我的最后一个选择是尝试一个VACUUM FULL users,但是由于这个表是在生产环境中使用的,所以不方便地锁定它,因为它占用了大量的时间。

我在CENTOS RHEL7机器上运行Postgres10.5数据库。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2019-08-22 07:16:45

普通的真空将为新数据(即其他TOASTed JSON数据)提供可用的空间。

如果您真的想将空闲空间还给操作系统,并且您负担不起独占锁,请尝试pg_雷帕克

要执行全表重新包装,pg_repack将:

  1. 创建一个日志表来记录对原始表所做的更改
  2. 将触发器添加到原始表中,在日志表中记录插入、更新和删除。
  3. 创建一个包含旧表中所有行的新表
  4. 在这个新表上构建索引
  5. 将日志表中应计的所有更改应用于新表。
  6. 使用系统目录交换表,包括索引和土司表。
  7. 删除原始表

它仍然需要足够的空间为原始表和新的副本。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/245965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档