微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL表-仅数据转储占用表大小的两倍以上

如何解决PostgreSQL表-仅数据转储占用表大小的两倍以上

我有一个Postgresql数据库,总大小为1.7TB。其中一张桌子占用了1.6TB的空间。总磁盘空间为1.7TB,因此我的磁盘空间不足。

我无法在其上运行Vacuum,我尝试截断几个表,然后使用可用空间在其他表上运行Vacuum,并能够获得一些空间。但是问题是我无法在占据99%空间的桌子上运行吸尘器。

因此,我尝试进行备份,以便可以截断该表。备份正在运行,备份大小已超过3TB,并且仍在增长。

我是Postgresql的新手,不知道如何处理这种情况。

我有一个用于备份的4TB临时空间,但我担心此备份的增长将超过可用空间。

我们将不胜感激任何帮助/指导。

解决方法

如果没有选择添加更多存储的选项,则可以通过将行逐渐迁移到新表中来处理这种情况。如果尚未分区表,请考虑对其进行分区。

应对情况的最佳方法是添加存储设备,甚至是临时添加。

关于表和备份之间的大小差异,我可以想到两个可能的原因:

  1. 您没有计算出正确的表大小。吐司表中可能有很多数据。

  2. 您有很多二进制数据,并且正在备份为文本大小写。如果真是这样,那么二进制数据的每个字节都会扩展为两个十六进制字符。

,

使用

pg_dump -F c -Z 9 -f dumpfile -t largetable dbname

那会很慢,但是会尽可能地压缩转储。

纯文本转储大于表是完全正常的。例如,integer占用4个字节,timestamp占用8个字节,但是它们的文本表示形式可以更大。此外,较大的列值会在磁盘上压缩。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。