首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pg_restore:[归档程序]没有在文件头中找到神奇的字符串

pg_restore:[归档程序]没有在文件头中找到神奇的字符串
EN

Database Administration用户
提问于 2015-08-22 10:06:20
回答 4查看 45.8K关注 0票数 29

我使用的是PostgreSQL 9.1,并希望恢复使用pg_dump生成的备份文件:

代码语言:javascript
运行
复制
sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name

此命令生成一个有效的sql文件,该文件首先删除任何现有的数据库对象,然后生成所有表、indize、序列等,最后插入数据。

当我尝试用:还原生成的备份文件时(仅为显示目的添加了换行)

代码语言:javascript
运行
复制
sudo pg_restore 
    -d database_name -h 127.0.0.1 -U postgres
    --format=c --clean --create out.sql

它失败并打印:

代码语言:javascript
运行
复制
pg_restore: [archiver] did not find magic string in file header

原因是什么?

EN

回答 4

Database Administration用户

回答已采纳

发布于 2015-08-22 13:34:40

您正在用pg_restore --format=c ...进行还原,但pg_dump不是用--format=c完成的,而是以默认的普通格式完成的。

来自pg_dump手册:

-F格式,- format = format选择输出的格式。格式可以是以下之一: p,普通输出一个纯文本SQL脚本文件(默认)。

普通格式的转储应该直接提供给psql命令行工具,pg_restore不知道它是什么,这就是错误消息的原因:没有在文件头中找到神奇的字符串。

您可以在shell中直接查看带有more out.sql的转储文件,您将看到可读的SQL命令。用psql -f out.sql [other options]还原它。您可能希望首先创建目标数据库,因为--create选项在pg_dump调用中不存在。

另一方面,您可以重新调用转储,将--format=c添加到其选项中。然后,情况正好相反:必须使用pg_restore来解释自定义格式的转储文件。

票数 31
EN

Database Administration用户

发布于 2017-06-30 17:23:47

一个可能的问题是您的数据文件被截断。通过比较文件大小,检查是否正在下载完整文件。

票数 1
EN

Database Administration用户

发布于 2019-02-09 23:24:12

如果您使用git,请确保有实际的文件,而不是指针!

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/111904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档