由于磁盘空间不足导致PG_Dump失败

我想在我的本地主机上使用pg_dump来转储远程计算机上的4GB PostgreSQL数据库。 我的本地主机报告15GB的可用空间。 我正在将输出传送给gzip。 但是,处理大约15分钟后,pg_dump中止,说明“pg_dump:[tar归档器]无法写入输出文件:设备上没有剩余空间”。 我不断地监视我的机器上可用磁盘空间的数量,并始终保持在〜10GB范围内。 为什么pg_dump由于磁盘空间不足而提前失败,尽pipe仍有足够的空间?

我的命令如下所示:

pg_dump -c --host=${HOST} --username=${DATABASEUSER} --blobs --format=t ${DATABASE} | gzip -c > /tmp/db-backup.tar.gz 

我build议将转储格式更改为自定义(-Fc, – 格式c),并避免tar格式。 AFAIK没有使用tar格式而不是自定义的优点(两者都与pg_restore一起使用)。

阅读之间的线,我怀疑你正在尝试使用'焦油'输出格式,这需要使临时文件,可以很大。 如果我猜对了,我build议使用“自定义”格式。 tar格式确实没有好处,除了这个之外还有几个缺点。

来自http://postgresql.1045698.n5.nabble.com/Out-of-space-making-backup-td1904089.html

如果您的安装来自软件包,那么您可能拥有“开箱即用”的自定义格式(zlib)支持。 您可以使用-Z选项(默认值为6)从0(无压缩)到9来控制压缩级别。

顺便检查一下你的-c选项。 根据http://www.postgresql.org/docs/9.0/static/app-pgdump.html

输出命令清理(删除)数据库对象之前(的命令)创build它们。

这个选项只对纯文本格式有意义。 对于存档格式,您可以在调用pg_restore时指定该选项。

BTW2为了方便起见,您可以使用自动PostgreSQL环境variables,如PGHOST,PGUSER,PGDATABASE,PGPORT。

在应用压缩之前,PostgreSQL中的tar pg_dump格式将任何一个表的大小限制为8GB。 而一个4GB的数据库不会转储到一个4GB的文件; 对于某些数据types,文本格式将会更大,并且由于我看到您倾倒blob,因此您可以很容易地进入该类别。 所以另外一个可能就是你有一张桌子,比如3GB; 转储时扩展到> 8GB; 而且你正在达到tar压缩限制,这在压缩开始之前就被强制执行了。如果是这种情况,以纯文本格式或自定义格式进行转储将会消除你的问题。

另一种可能性是,你的驱动器的大小约为10GB,约为5%。 如果您的分区大约是200GB,那么您可能会达到5%的空间保留在ext4根目录的限制。 如果是这样的话,你可以使用类似的东西来消除:

 sudo tune2fs -m 0 /dev/sda1