通过SSH使用pg_restore还原Postgres数据库

时间:2018-08-07 14:37:29

标签: postgresql ssh pg-restore

我有一个没有太多磁盘空间的数据库服务器,因此我对整个数据库进行了备份(我们将其称为redblue),并使用以下命令将其保存在本地(我的计算机上没有运行pg):

ssh admin@w.x.y.z "pg_dump -U postgres redblue -h localhost " \
 >> db_backup_redblue.sql

我现在想将其还原到另一台服务器(1.2.3.4),其中包含旧版本的“ redblue”数据库-但是想在尝试之前先问一下是否正确:

ssh admin@1.2.3.4 "pg_restore -U postgres -C redblue" \
<< db_backup_redblue.sql

我不确定是否需要对数据库名称进行-C操作?

上面的命令会用我本地拥有的文件覆盖/还原远程数据库吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

不,那将无济于事。

您必须在转储所在的计算机上启动pg_restore。实际上,由于这是纯格式转储,因此您必须使用psql而不是pg_restore

psql -h 1.2.3.4 -U postgres -d redblue -f db_backup_redblue.sql

这要求目标系统上已经有一个空的数据库redblue

如果要替换现有数据库,则必须将--clean--create选项与pg_dump一起使用。

如果要使用SSL,则必须将PostgreSQL服务器配置为接受SSL连接,请参见the documentation

我建议使用pg_dump的“自定义”格式。

答案 1 :(得分:0)

当然,您可以这样做:) 假设您使用 ssh 密钥授权用户从源主机到目标主机。

在源主机上执行 pg_dump,然后像这样通过 ssh 管道传输到目标主机:

pg_dump -C nextcloud | ssh -i .ssh/pg_nextcloud_key postgres@192.168.0.54 psql -d template1

希望有所帮助;)