如何将pg_dump文件恢复到Postgres数据库中

4

我经常使用pgadmin4备份和还原数据库和模式。我想用批处理文件使用pg_dump和pg_restore命令来完成此操作。然而,我总是失败了,并需要一些帮助。我尝试导出一个模式(带有数据)的方法如下:

pg_dump -U postgres -F c -d database -n schema > mw2

然后我尝试使用pg_restore进行恢复:

pg_restore -U postgres -d otherdatabase -n schema mw2

首先我尝试使用.dump代替tar,但结果仍然相同;我的数据库中是一个空模式。

或者出现以下错误信息:

pg_restore: [archiver] input file does not appear to be a valid archive
1个回答

5

https://www.postgresql.org/docs/current/static/app-pgrestore.html

--format=format指定存档格式。实际上不需要指定格式,因为pg_restore会自动检测格式。如果要指定,可以是以下格式之一:自定义,目录和tar

https://www.postgresql.org/docs/current/static/app-pgdump.html

--format=format

选择输出的格式。格式可以是以下之一:

p plain 输出纯文本 SQL 脚本文件(默认值)。

其他格式包括custom、directory 和 tar

简而言之,您使用了默认的plain格式,该格式适用于与psql一起使用,而不是pg_restore。因此,请使用pg_dump指定不同的格式或将您的文件用作

psql -f  mw2.tar

现在尝试通过在转储中添加“-F t”来测试它。 - Zuenie
现在它确实执行了,但生成的模式仍然为空。仍然不起作用;我会更新我的代码。 - Zuenie
现在正在查看 psql -f mw2.tar,但我首先需要选择正确的数据库和架构。 - Zuenie
请不要搞乱POST请求。如果您现在遇到了其他问题,请尝试在现有的帖子中寻找解决方案,如果没有,请提出新的问题。 - Vao Tsun
1
@Zuenie 是的 - 当然,就像 psql -U postgres -d otherdatabase -f mw2。我只提到了 -f 键因为它是不同的。 - Vao Tsun
它只是在您现有的数据库中添加了一个新模式。我原以为必须在数据库中选择一个模式,以便 psql 知道在哪里还原它。现在明白了,运行得非常好! - Zuenie

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