我正在学习Postgres DVD教程,但在导入他们的示例数据库时遇到了问题。
跑步pg_restore -U postgres -d dvdrental ~[filepath]/dvd-database.tar.gz
给了我pg_restore: [archiver] input file does not appear to be a valid archive
.
到目前为止,我的过程如下:
- 下载 dvdrental.zip 文件
- 使用
tar czf dvd-database.tar.gz dvdrental.zip
将其解压缩到.tar(我也尝试先将 zip 解压缩到具有相同结果的文件夹中,并删除.gz) - 如上所述运行
pg_restore -U postgres -d dvdrental ~[filepath]/dvd-database.tar
。
我目前正在使用 Postgres 9.5,这可能会导致问题。寻找一个答案,指出我在这个过程中出错的地方,或者如何将Postgres数据库的存档更新到9.5。
根据上面的评论,解决方案很简单。
不需要按照教程说明中的建议将 dvdrental.zip 文件解压缩到未压缩的.tar。 如果指向提取数据库转储的目录,pg_restore
将起作用:
pg_restore -U <username> -d dvdrental <your/path/to/extracted/dir>/dvdrental
我的问题是在安装 postgresql 时,我为超级用户选择了不同的名称(例如,root
,而不是 postgres
)。dvdrental/restore.sql
文件使用 postgres
角色。因此,要解决此问题,您需要创建另一个名为 postgres
的超级用户。
createuser --superuser postgres
然后创建具有角色postgres
的服务器(PosgreSQL)和具有角色postgres
的数据库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 提取的目录。
如果你在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 文件,选择上传的文件,然后选择三个选项:前数据、数据和后数据。收到错误:失败,退出代码为 1。
删除数据库,再次创建数据库(具有相同的名称),执行与以前完全相同的方式。
这是第二次成功。在日志中,它执行了以下cmd:
/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"
使用 pgAdmin 4 会更容易。
通过 pgAdmin 将 tar 文件还原到数据库时,您会收到此错误。我们通常会在这一点上卡住,忘记检查模式。
忽略该错误。数据已加载并还原。