【问题标题】:Restore Postgres database using pg_restore over SSH通过 SSH 使用 pg_restore 恢复 Postgres 数据库
【发布时间】:2018-08-07 14:37:29
【问题描述】:

我有一个没有太多磁盘空间的数据库服务器,所以我备份了整个数据库(我们称之为 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 ?

上面的命令会用我本地的文件覆盖/恢复远程数据库吗?

谢谢!

【问题讨论】:

标签: postgresql ssh pg-restore


【解决方案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 的“自定义”格式。

【讨论】:

    【解决方案2】:

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

    在源主机上执行 pg_dump,然后通过 ssh 管道到目标主机,如下所示:

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

    希望有所帮助;)

    【讨论】:

      猜你喜欢
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      相关资源
      最近更新 更多