使用 cat 将大型数据库转储加载到 PostgreSQL

使用 cat 将大型数据库转储加载到 PostgreSQL

我有一对非常大(约 17 GB)的数据库转储,我想将其加载到 postgresql 9.3 中。在安装了数据库包、或多或少学会了如何使用它们,并在各种 StackExchange 页面上稍微摆弄了一下之后(特别是这个问题),对我来说,正确的命令看起来应该是这样的:

cat mydb.pgdump | psql mydb

因为转储的格式。我的机器有 16 GB 的 RAM,我不熟悉该cat命令,但我知道我的 RAM 已耗尽 99%,数据库需要一段时间才能加载。我的机器没有无响应到挂起的程度;我可以在其他终端窗口中运行其他命令,并让它们以合理的速度执行,但我想知道这是否cat是管道传输文件的最佳方式,还是有其他更有效的方法?我担心的是,也许cat会用完所有的 RAM,所以数据库没有太多可用资源,从而限制了它的性能。但我对这种 RAM 问题还不熟悉,不知道我是不是在杞人忧天。

现在我想起来,这似乎更像是一个关于cat内存使用的问题,而不是其他问题。如果有更适合这个问题的论坛,请告诉我。谢谢!

答案1

我担心的是 cat 可能会用完所有 RAM,导致数据库没有太多可用资源,从而限制其性能。

事实并非如此。cat只是将数据从输入流传输到输出。

无论如何,这里没有必要,使用

psql dbname < mydb.pgdump

我的 RAM 已耗尽 99%,数据库需要一段时间才能加载。

您如何测量“99% 已耗尽”?我想知道您是否未能排除缓冲区/缓存。显示输出free -h(或者如果失败并出现错误,则显示free -m)。

一般来说,为了更快地恢复数据库,我建议采用自定义格式(-Fc)转储,然后使用并行pg_restore而不是psql

相关内容