pg_restore:[存档]在文件头中找不到魔术字符串


13

我正在使用PostgreSQL 9.1,并希望还原使用生成的备份文件pg_dump

sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name

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

当我尝试使用以下方法还原生成的备份文件时:(添加换行符仅用于显示目的)

sudo pg_restore 
    -d database_name -h 127.0.0.1 -U postgres
    --format=c --clean --create out.sql

它失败并打印:

pg_restore: [archiver] did not find magic string in file header

是什么原因呢?

Answers:


19

您正在还原,pg_restore --format=c ...pg_dump还没有完成--format=c,它是使用默认的 格式完成的。

pg_dump联机帮助页:

  -F format, --format=format
       Selects the format of the output.  format can be one of the
       following:

       p, plain
           Output a plain-text SQL script file (the default).

普通格式的转储应该直接馈送到psql命令行工具,pg_restore不知道它是什么,这是此错误消息的原因:在文件header中找不到魔术字符串

您可以直接在more out.sqlin shell中查看转储文件,并且会看到可读的SQL命令。使用恢复它psql -f out.sql [other options]。您可能需要首先创建目标数据库,因为该--create选项在pg_dump调用中不存在。

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


0

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.