在网络上快速复制PostgreSQL数据库的方法

3
我一直在使用这个命令在同一服务器上快速复制我的数据库。
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

如果我想通过本地网络连接到第二台服务器,这是否可行?

我使用的是Postgresql 9.2和Win 7 x64(两台机器都是这个配置)。

1个回答

3
使用pg_dump命令:
pg_dump -h host1 -Fc originaldb | pg_restore -h host2 -d newdb

理想情况下,您应该在主机1或主机2上运行此程序。

对不起,我对Windows不熟悉,那里是否有管道运算符? - Clodoaldo Neto
1
我不了解原生的Windows shell,但如果你想要在PostgreSQL命令行工具上做更多的事情,安装bash可能是个好主意。 - Peter Eisentraut
1
在 pg_restore 中添加 --jobs=X(其中 X 是恢复目标主机的 CPU 数量)通常可以加快恢复速度。 - dbenhur
1
并行恢复在这种情况下不太有用。在上面的例子中,转储和恢复是并行运行的。如果您想使用并行恢复,您必须等待转储完成。因此,您可能根本不会节省任何时间。 - Peter Eisentraut
关于并行化和-Fc参数,我建议使用-Fd代替。从https://www.postgresql.org/docs/current/app-pgdump.html:_pg_dump可用于备份整个数据库,然后可以使用pg_restore来检查存档和/或选择要恢复的数据库部分。最灵活的输出文件格式是“自定义”格式(-Fc)和“目录”格式(-Fd)。它们允许选择和重新排序所有归档项目,支持并行恢复,并默认进行压缩。“目录”格式是唯一支持并行转储的格式。_ - Pablo Adames
当使用-Fd参数时,您可能需要添加您的用户名和文件名。假设您在主机2上,并且想要备份主机1中的db到主机2:pg_dump -h IP_HOST_1 -U USER_HOST_1 -f /PATH/TO/DIR_NAME -Fd DB_NAME | pg_restore -h IP_HOST_2 -d NAME_DB_BACKUP。假设您在主机2上执行Shell命令行,则DIR_NAME将在HOST_2中的当前目录中创建。 - Pablo Adames

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