postgres,从外部服务器上的模板创建数据库

问题描述:

我有两台服务器具有相同版本的postgres(9.4)。 我想快速克隆数据库(备份和恢复)。 正如我所理解的“从模板创建数据库xxx”是制作数据库副本的最快方法。postgres,从外部服务器上的模板创建数据库

如何从一台服务器克隆到另一台服务器? 我可以使用dblink完成这个任务吗?

我知道使用pg_dump和pg_restore(psql)的解决方案,但我认为它对我来说太慢了。 例如,5GB数据库大约在12分钟后恢复(在pg_restore中使用-j选项)并在大约2分钟后备份。

另一种方式,可能是我可以复制一些postgres文件(/ var/lib/postgresql/*)到另一台服务器,并在那里运行postgres?如何找到这个文件?

您不能使用来自不同数据库集群(在相同或不同机器上)的数据库作为模板来创建新数据库,因此不能使用该数据库。

将数据库从一个群集复制到另一个群集的唯一现有方式是pg_dump/pg_restore

物理副本是最快的方式,但不能将单个文件或数据库从一个数据库群集复制到另一个数据库群集。

如果您不介意复制整个数据库群集,则可以选择停止并除去目标数据库群集,执行pg_basebackup -X stream以创建源数据库群集的物理备份,根据需要编辑配置并启动新的副本。

如果pg_basebackup是你太慢了,你可以用手”与pg_start_backuppg_stop_backup执行联机备份“和插图中与你有最快的技术复制文件。

如果停止源数据库集群没有问题,则不必担心恢复问题,而且速度会更快。

Laurenz说,你不能复制模板。原因是它需要集成到postgres的共享目录中,如pg_database等,并且因为它共享数据库范围的资源,如事务日志(pg_clog)。

从理论上讲,你其实可以另一台机器复制的模板,如果所有元组被VACUUM FREEZE冻结。但是,您必须进行一些手动设置来整合复制的模板,并且容易出错并且存在风险。你需要非常了解postgres内部的知识。

这真的不值得。