PostgreSQL:pg_restore:[存档器]输入文件似乎不是有效的存档

问题描述 投票:0回答:8

我正在学习 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

到目前为止我的流程如下:

  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。

database postgresql tar postgresql-9.5 pg-restore
8个回答
28
投票

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

无需按照教程说明中的建议将 dvdrental.zip 文件解压为未压缩的 .tar。

pg_restore
如果指向提取数据库转储的目录将会工作

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


3
投票

我的问题是,在安装 postgresql 时,我为超级用户选择了不同的名称(例如,

root
,而不是
postgres
)。并且
dvdrental/restore.sql
文件使用
postgres
角色。 因此,要解决这个问题,您需要创建另一个名为
postgres
的超级用户。

createuser --superuser postgres

然后创建具有角色

postgres
的服务器 (PosgreSQL) 和具有角色
dvdrental
的数据库
postgres
。 当你可以成功地从提取的文件夹恢复数据库后


0
投票

在尝试了几个小时后,对我有用的是以下命令。从 PgAdmin 4 开始,使用起来非常困难。

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

只需将 zip 解压到一个文件夹中,然后在我的 Mac 操作系统中使用这些选项执行

pg_restore
命令,其中
/pg-db/dvdrental/
是 zip 解压后的目录。


0
投票

如果您在

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

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

这里,

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


0
投票

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

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

在“恢复”对话框中,“custome and tar”,文件名“...”,点击上传上传tar文件,选择上传的文件,然后选择三个选项:前数据、数据和后数据数据。 收到错误:失败,退出代码为 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"

0
投票

要将 SQL 文本文件恢复到 PostgreSQL 数据库中,您可以使用

psql
命令行工具,该工具通常用于与 PostgreSQL 数据库交互。以下是恢复 SQL 文本文件的步骤:

  1. 打开命令提示符或终端:在计算机上打开命令提示符或终端窗口。

  2. 导航到目录:使用

    cd
    命令导航到 SQL 文本文件所在的目录。

    cd /path/to/directory
    
  3. 登录 PostgreSQL:使用

    psql
    命令登录 PostgreSQL 数据库。您需要提供用户名和数据库名称作为参数。您可能还需要输入密码。

    psql -U your_username -d your_database
    

    your_username
    替换为您的 PostgreSQL 用户名,并将
    your_database
    替换为要将 SQL 文件还原到的数据库的名称。

  4. 执行 SQL 文件:登录后,您可以使用

    \i
    命令后跟文件路径来从文本文件执行 SQL 命令:

    \i /path/to/your_sql_file.sql
    

    /path/to/your_sql_file.sql
    替换为 SQL 文本文件的完整路径。

  5. 退出 psql:SQL 文件执行完毕后,您可以通过输入以下命令退出

    psql

    \q
    

    这将使您返回到命令提示符。

就是这样!您的 SQL 文本文件已恢复到 PostgreSQL 数据库中。确保您的 SQL 文件包含有效的 SQL 语句并且与您的 PostgreSQL 数据库版本兼容。


0
投票

我在下面遇到了同样的错误:

pg_restore:错误:输入文件似乎不是有效的存档

因为我导出但没有使用

pg_dump
apple
数据库存档到backup.sql,如下所示:

pg_dump -U john apple > backup.sql

或者:

pg_dump -U john -Fp apple > backup.sql

然后,我尝试使用必须用于导入存档文件的

pg_restore
将非存档
backup.sql
导入到orange数据库:

pg_restore -U john -d orange < backup.sql

所以,我用psql做到了,它必须用于导入非存档文件,然后我可以解决错误。 *我的答案解释了如何导出架构和数据,我的答案解释了如何导入架构和数据:

psql -U john -f backup.sql orange

-2
投票

使用pgAdmin 4会更容易。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.