我有一个15 GB的压缩PostgreSQL转储(作为pgbackup),提取时接近60 GB。 我有一个只有69GB可用空间的云服务器(将pgbackup拷贝到磁盘盒上后是54GB),我想知道是否有一种巧妙的方法可以将pgbackup分割成许多较小的压缩pgbbackup文件,删除原始的大的pgbackup,然后遍历小的pgbackup,解压缩,执行它们,然后删除它们,这样我就可以在PostgreSQL数据库中以磁盘约束结束整个数据集。
这里有一堆可能的解决方法。 select一个满足你的要求。
答案很简单 – 使用pipe道:
xzcat dumpFile.xz | pg_restore ....
这样您就不需要额外的磁盘空间来提取压缩的转储文件。
见man pg_restore :
-f文件名, – 文件=文件名
为生成的脚本指定输出文件,或者在与-l一起使用时指定列表。
默认是标准输出。
如果运行到磁盘空间不足以将压缩的转储文件复制到服务器,请使用ssh进行调用:
xzcat dumpFile.xz |ssh -T user@dbserver pg_restore ...
另一种方法是重新configurationpostgreSQL数据库以允许来自本地工作站的连接。 在这种情况下,您可以在本地系统上使用pg_restore ,并将PGHOST, PGPORT, PGUSER设置为正确的值。
split命令(或任何类似的工具)将其裁减成小块。 在数据库服务器上创build一个像等待接收部分转储文件的作业,例如
while sleep 10 do if [ -r dumpPart ] then cat dumpPart echo "next part is loaded" >&2 rm -f dumpPart fi done | pg_restore ....
使用目标名称dumpPart上传步骤,以执行您的转储部分。 确保速度合理低于上面的睡眠声明。