Postgres 教程:pg_restore:[archiver] 输入文件似乎不是有效的存档

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

我正在研究 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。

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

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

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

在尝试了几个小时后,下面的命令对我有用。从 PgAdmin 4 开始很难使用。

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

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

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

的超级用户
createuser --superuser postgres

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

使用 pgAdmin 4 会更容易。

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

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

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

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

这里,./Downloads/dvdrental 是从 dvdrental.zip

中提取的文件夹

不知道原因,但这就是我的工作方式。

我正在使用 ubuntu 20.04,pgadmin4 5.7 版,postgres 12.8 版。

在“还原”对话框中,“自定义和tar”,文件名中的“...”,点击上传上传tar文件,上传的select文件,然后 selected 三个选项:pre-data、data 和 post-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"