我有一个 15 GB 的压缩 PostgreSQL 转储(作为 pgbackup),提取后接近 60 GB。我的云服务器只有 69 GB 的可用空间(将 pgbackup 复制到盒子上后为 54 GB),我想知道是否有一种巧妙的方法可以将 pgbackup 拆分为许多较小的压缩 pgbbackup 文件,删除原始的大型 pgbackup,然后迭代较小的 pgbackup,解压缩、执行它们,然后删除它们,这样我就可以在磁盘限制的情况下将整个数据集保存在 PostgreSQL 数据库中。
答案1
这里有很多可行的解决方法。选择一个符合您要求的。
通过标准输入
答案很简单——使用管道:
xzcat dumpFile.xz | pg_restore ....
这样,您不需要额外的磁盘空间来提取压缩的转储文件。
看man pg_restore
:
-f 文件名, --file=文件名
指定生成的脚本的输出文件,或与 -l 一起使用时列表的输出文件。
默认是标准输出。
通过 stdin 和 ssh
如果磁盘空间不足,无法将压缩的转储文件复制到服务器,请使用以下ssh
命令进行调用:
xzcat dumpFile.xz |ssh -T user@dbserver pg_restore ...
通过网络进行 pg_restore
另一种方法是重新配置您的 postgreSQL 数据库以允许从本地工作站进行连接。在这种情况下,您可以pg_restore
在本地系统上使用并设置PGHOST, PGPORT, PGUSER
正确的值。
拆分垃圾
- 将转储下载到具有足够磁盘空间的机器上。
- 使用
split
命令(或任何类似工具)将其切割成更小的碎片。 - 从数据库服务器中删除转储。
在数据库服务器上创建一个等待接收部分转储文件的作业,例如
while sleep 10 do if [ -r dumpPart ] then cat dumpPart echo "next part is loaded" >&2 rm -f dumpPart fi done | pg_restore ....
逐步上传转储部分,目标名称为 dumpPart。确保速度合理低于上述 sleep 语句。