在外部服务器上使用模板创建Postgres数据库

4
我有两个版本相同的postgres服务器(9.4)。 我想创建一个快速克隆数据库(备份和恢复)。 我理解使用“从模板创建数据库xxx”是最快的复制数据库的方法。
如何将一个服务器上的数据库克隆到另一个服务器上? 我可以使用dblink完成此任务吗?如何使用?
我知道一种解决方法是使用pg_dump和pg_restore(psql),但我认为这对我来说太慢了。 例如,5GB的数据库恢复时间约为12分钟(使用pg_restore中的-j选项),备份时间约为2分钟。
另一种方式可能是,我可以将某些postgres文件(/var/lib/postgresql/*)复制到另一个服务器上,并在那里运行postgres。如何找到这些文件?
2个回答

3
您不能使用来自不同数据库群集(在同一台或不同的计算机上)的数据库作为模板来创建新数据库,因此那是不行的。
目前唯一现有的方法是使用pg_dump/pg_restore将数据库从一个群集复制到另一个群集。
物理复制是最快的方式,但您不能仅将单个文件或数据库从一个数据库群集复制到另一个群集。
如果您不介意复制整个数据库群集,则可以选择停止并删除目标数据库群集,执行pg_basebackup -X stream以创建源数据库群集的物理备份,根据需要编辑配置并启动新副本。
如果pg_basebackup对您来说太慢了,您可以使用pg_start_backup和pg_stop_backup手动执行在线备份,并使用最快的技术在两者之间复制文件。
如果停止源数据库群集没有问题,您就不必处理恢复,速度会更快。

0

正如 Laurenz 所说,你不能复制一个模板。原因在于它需要集成到 postgres 的共享目录中,例如 pg_database 等,并且因为它共享全局数据库资源,如事务日志 (pg_clog)。

理论上,如果所有元组都通过 VACUUM FREEZE 被冻结,你实际上可以从另一台机器复制一个模板。但是你需要进行一些手动设置来集成复制的模板,这可能会存在漏洞和风险。你需要非常了解 postgres 的内部机制。

这真不值得。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接