我有一个没有太多磁盘空间的数据库服务器,因此我对整个数据库进行了备份(我们将其称为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操作?
上面的命令会用我本地拥有的文件覆盖/还原远程数据库吗?
谢谢!
答案 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
希望有所帮助;)