通过 SSH 使用 pg_restore 恢复 Postgres 数据库
Restore Postgres database using pg_restore over SSH
我有一个没有太多磁盘的数据库服务器 space,所以我备份了整个数据库(我们就称它为 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?
上面的命令 overwrite/restore 远程数据库会不会有我本地的文件?
谢谢!
不,那没有任何好处。
您必须在转储所在的机器上启动 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
的“自定义”格式。
当然,你可以这样做 :) 假设你使用 ssh 密钥授权用户从源主机到目标主机。
在源主机上执行 pg_dump,然后像这样通过 ssh 管道连接到目标主机:
pg_dump -C nextcloud | ssh -i .ssh/pg_nextcloud_key postgres@192.168.0.54 psql -d template1
希望对您有所帮助 ;)
我有一个没有太多磁盘的数据库服务器 space,所以我备份了整个数据库(我们就称它为 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?
上面的命令 overwrite/restore 远程数据库会不会有我本地的文件?
谢谢!
不,那没有任何好处。
您必须在转储所在的机器上启动 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
的“自定义”格式。
当然,你可以这样做 :) 假设你使用 ssh 密钥授权用户从源主机到目标主机。
在源主机上执行 pg_dump,然后像这样通过 ssh 管道连接到目标主机:
pg_dump -C nextcloud | ssh -i .ssh/pg_nextcloud_key postgres@192.168.0.54 psql -d template1
希望对您有所帮助 ;)