【问题标题】:Postgres Tutorial: pg_restore: [archiver] input file does not appear to be a valid archivePostgres 教程:pg_restore:[archiver] 输入文件似乎不是有效的存档
【发布时间】:2016-02-06 21:33:52
【问题描述】:

我正在处理Postgres DVD tutorial,但在导入他们的示例数据库时遇到了问题。

运行pg_restore -U postgres -d dvdrental ~[filepath]/dvd-database.tar.gz 给我pg_restore: [archiver] input file does not appear to be a valid archive

到目前为止,我的过程如下:

  1. 下载dvdrental.zip文件
  2. 使用 tar czf dvd-database.tar.gz dvdrental.zip 将其解压缩为 .tar(我也尝试先将 zip 解压缩到文件夹,结果相同,然后删除 .gz)
  3. 如上所述运行pg_restore -U postgres -d dvdrental ~[filepath]/dvd-database.tar

我目前使用的是 Postgres 9.5,这可能会导致该问题。寻找一个答案,指出我在这个过程中哪里出了问题,或者如何将 Postgres 数据库的存档更新到 9.5。

【问题讨论】:

  • 我不认为pg_restore 可以处理.tar.gz。您是否尝试解压缩存档unzip dvdrental.zip,然后将.tar 文件提供给pg_restore
  • 正要编辑这个——我不正确地使用了 tar 并在我无意的时候输出了一个 gzip 压缩文件。但是,现在我为pg_restore 提供了一个未压缩的tar,我得到了pg_restore: [tar archiver] could not find header for file "toc.dat" in tar archive,尽管在解压缩.tar 时存在toc.dat。
  • 然后尝试解压tar并将pg_restore指向目录
  • 谢谢你的工作。显然是想太多了/需要阅读文档。

标签: postgresql tar pg-restore postgresql-9.5


【解决方案1】:

根据上面的 cmets,解决方案很简单。

按照教程说明中的建议,不需要将 dvdrental.zip 文件解压缩为未压缩的 .tar。 pg_restore will work 如果指向提取数据库转储的目录

pg_restore -U <username> -d dvdrental <your/path/to/extracted/dir>/dvdrental

【讨论】:

  • 如果你在 mac 上运行 postgres.app 并重新启动终端。然后在这个帖子上执行命令,指向提取的文件夹。 sudo mkdir -p /etc/paths.d && echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp 参考:postgresapp.com/documentation/cli-tools.html
【解决方案2】:

我的问题是,在安装 postgresql 时,我为超级用户选择了不同的名称(例如root,而不是postgres)。而dvdrental/restore.sql 文件使用postgres 角色。 所以要解决这个问题,你需要创建另一个名为postgres的超级用户。

createuser --superuser postgres

然后创建角色为postgres 的服务器(PosgreSQL)和角色postgres 的db dvdrental。 在你可以成功地从提取的文件夹中恢复数据库之后

【讨论】:

    【解决方案3】:

    经过几个小时对我有用的是以下命令。从 PgAdmin 4 开始,它很难使用。

    /Library/PostgreSQL/10/bin/pg_restore -U postgres -p 5433  -d dvdrental /pg-db/dvdrental/
    

    只需将 zip 解压到一个文件夹中,然后在我的 Mac os 中使用这些选项执行 pg_restore 命令,其中/pg-db/dvdrental/ 是 zip 解压缩的目录。

    【讨论】:

      【解决方案4】:

      pgAdmin 4 会更容易使用。

      通过 pgAdmin 将 tar 文件恢复到数据库时,您会收到此错误。我们通常会卡在这一点上而忘记检查架构。

      忽略错误。数据已加载并恢复。

      【讨论】:

        【解决方案5】:

        如果您在 Docker 上运行 postgres,请确保传递主机名和端口,

        pg_restore -U postgres -h localhost -p 5432 -d dvdrental ./Downloads/dvdrental
        

        这里,./Downloads/dvdrental 是从 dvdrental.zip 中提取的文件夹

        【讨论】:

          【解决方案6】:

          不知道原因,但这对我来说是这样的。

          我使用的是 ubuntu 20.04,pgadmin4 版本 5.7,postgres 版本 12.8。

          在“恢复”对话框中,文件名中的“custome and tar”、“...”,点击upload上传tar文件,选择上传的文件,然后选择pre-data、data和三个选项发布数据。 收到错误:失败,退出代码为 1。

          删除了数据库,再次创建了数据库(同名),方法和以前完全一样。

          这第二次成功了。 在日志中它执行了以下命令:

          /usr/bin/pg_restore --host "localhost" --port "5432" --username "postgres" --no-password --dbname "mydb" 
          --section=pre-data --section=data --section=post-data --verbose "/var/lib/pgadmin/storage/my_email.com/restore_file.tar"
          

          【讨论】:

            猜你喜欢
            • 2021-06-02
            • 2023-01-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-27
            • 1970-01-01
            • 1970-01-01
            • 2018-08-28
            相关资源
            最近更新 更多