PG_Dump 因误认为磁盘空间不足而失败

Cer*_*rin 3 postgresql database

我正在尝试在我的本地主机上使用 pg_dump 在远程机器上转储 4GB PostgreSQL 数据库。我的本地主机报告有 15GB 的可用空间。我正在将输出通过管道传输到 gzip。但是,经过大约 15 分钟的处理后,pg_dump 中止,指出“pg_dump:[tar 归档程序] 无法写入输出文件:设备上没有剩余空间”。我不断监视我机器上的可用磁盘空间量,它始终保持在 ~10GB 范围内。为什么 pg_dump 由于磁盘空间不足而过早失败,即使仍有足够的空间?

我的命令看起来像:

pg_dump -c --host=${HOST} --username=${DATABASEUSER} --blobs --format=t ${DATABASE} | gzip -c > /tmp/db-backup.tar.gz
Run Code Online (Sandbox Code Playgroud)

Grz*_*ski 6

我建议将转储格式更改为自定义(-Fc,--format c)并完全避免使用 tar 格式。AFAIK 使用 tar 格式而不是自定义格式没有优势(两者都适用于 pg_restore)。

从字里行间看,我怀疑您正在尝试使用“tar”输出格式,这确实需要制作可能很大的临时文件。如果我猜对了,我建议改用“自定义”格式。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

在(用于)创建数据库对象之前,输出命令以清除(删除)数据库对象。

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

BTW2 为方便起见,您可以使用自动 PostgreSQL 环境变量,例如 PGHOST、PGUSER、PGDATABASE、PGPORT。