![使用 cat 将大型数据库转储加载到 PostgreSQL](https://linux22.com/image/634203/%E4%BD%BF%E7%94%A8%20cat%20%E5%B0%86%E5%A4%A7%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BD%AC%E5%82%A8%E5%8A%A0%E8%BD%BD%E5%88%B0%20PostgreSQL.png)
我有一对非常大(约 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
。