我在一台机器上使用了pg_dump并将结果文件复制到另一台机器上,尝试在其中进行还原。我相信架构是相同的。但是,我得到了:

pg_restore: [archiver] input file does not appear to be a valid archive


我已经完成了以下操作:

pg_dump -a -f db.txt dbname


并且:

pg_restore -a -d dbname db.txt


怎么了?

评论

尝试在生成转储的同一台计算机上导入转储。另外,请检查Postgres版本。

我不能尝试将其导入同一台计算机,因为它是生产计算机。知道了,我还能做什么?

此解决方案也可能与某些人有关:stackoverflow.com/questions/42433414/…

#1 楼

您正在以纯SQL格式转储,该格式旨在提供给psql。 pg_restore无法识别此问题。

cat db.txt | psql dbname


应该解决这个问题

评论


或psql dbname
– Aleksey Deryagin
17年7月7日在16:59

它还需要Windows机器中的用户名:“ cat dump_file | psql db_user”

–种族主义
20-04-26在19:44

#2 楼

默认情况下,pg_dump创建重新创建数据所需的sql命令。要恢复它,您只需要使用输入文件调用psql(而不是pg_restore)。 pg_restore仅用于pg_dump的二进制(非默认值,建议不要使用不常用的格式)。阅读文档。

更新:与pg_dump一起使用的-Fc二进制格式(-Ft pg_restore)是可以的,并且提供了一些额外的灵活性。但是它们的标准性较差(非SQL),较不易于从某些工具(例如php前端)导入或使用文本编辑器进行操作,而对其他版本甚至其他数据库的可移植性则差一些。对于备份,我会坚持使用默认的纯格式。对于其他情况,binary + pg_restore选项可以同等或更合适。

保留的要点是在Postgresql中,在典型情况下,备份通常由pg_dump(普通)完成,并通过标准命令行客户端(psql)进行恢复。

评论


[OT]我希望对定制输出格式的“不推荐”状态有所不同-句子“这是最灵活的格式,因为它允许对加载数据以及对象定义进行重新排序...”对我来说是相当认可。

–迈伦·拉迪夫(Milen A. Radev)
2010年6月14日在17:09

我同意,“不推荐”是一种夸大的说法。但是“最灵活”并不一定意味着“最推荐”。澄清。

–leonbloy
2010-6-14 17:25

#3 楼

尝试将--format=c选项传递给pg_dump。这将允许pg_restore恢复它。

评论


谁愿意对此进行修改,想解释为什么?接受的答案说明这将起作用:-)

–psmears
2010-09-25 9:28

@skrafi:你的意思是?

–psmears
16年4月20日在8:57

抱歉,复制粘贴的输出错误,正确的输出是pg_restore:[archiver]在文件头中找不到魔术字符串,因此对于简单的sql dump不起作用

– skrafi
16-4-20在9:05



@skrafi:我不确定你的意思。如果您使用pg_dump --format = c ...>存档文件,然后对存档文件使用pg_restore,那么(至少在我刚刚进行测试时)它可以正常工作。也许您的文件以某种方式损坏了?还是您遇到了特定的错误?

–psmears
16年4月20日在9:35

#4 楼

这就是我要备份旧数据库并还原

备份数据库

pg_dump --format=c olddb_name > db_dump_file.dump


还原该备份的方法

pg_restore -v -d newdb_name db_dump_file.dump


详细了解pg_dump和pg_restore

#5 楼

对于Windows用户,请尝试

type db.txt | psql --username="YOURNAME" dbname


像魅力一样工作

评论


这救了我,谢谢!至少应接受Windows的答案。

–丹尼尔·巴特勒(Daniel Butler)
19年8月8日在19:30

#6 楼

您可以对MySQL的SOURCE命令执行以下操作:

psql dbname


然后在postgresql终端中:

\i filename


#7 楼

猫dumpFileName | psql -h ip -d dbName -U用户名-W

评论


如果您说明这样做的目的以及为什么会有所帮助,通常会很有帮助。

–猎鹰Momot
2014年4月11日在18:23

#8 楼

此错误消息也可能意味着备份文件实际上有问题(或您对此的假设)。

在一种情况下,我已将备份文件安装在Docker容器中并尝试还原,但失败,原因是does not appear to be a valid archive。实际上,该文件为空,因为安装不正确。