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

lmyy7pcs  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(8)|浏览(432)

我正在使用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文件
1.使用tar czf dvd-database.tar.gz dvdrental.zip将其解压缩为.tar(我也尝试过先将zip解压缩到一个文件夹,结果相同,同时删除.gz)
1.如上所述运行pg_restore -U postgres -d dvdrental ~[filepath]/dvd-database.tar
我目前使用的是Postgres 9.5,这可能是导致问题的原因。寻找一个答案,指出我在这个过程中出错的地方,或者如何将Postgres数据库的存档更新到9.5。

sg24os4d

sg24os4d1#

根据上面的评论,解决方案很简单。
不dvdrental.zip需要按照教程说明中的建议将www.example.com文件解压缩为未压缩的.tar。pg_restorewill work,如果指向提取数据库转储的目录
pg_restore -U <username> -d dvdrental <your/path/to/extracted/dir>/dvdrental

w6lpcovy

w6lpcovy2#

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

createuser --superuser postgres

然后创建具有角色postgres的服务器(PosgreSQL)和具有角色postgres的数据库dvdrental。后u可以成功地恢复数据库从解压缩文件夹

klr1opcd

klr1opcd3#

在尝试了几个小时后,为我工作的是下面的命令。自从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解压目录)。

ippsafx7

ippsafx74#

如果你在Docker上运行你的postgres,那么确保传递主机名和端口,

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

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

d6kp6zgx

d6kp6zgx5#

不知道为什么,但这就是它对我的作用。
我用的是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"
xlpyo6sf

xlpyo6sf6#

要将SQL文本文件恢复到PostgreSQL数据库中,可以使用psql命令行工具,该工具通常用于与PostgreSQL数据库交互。以下是恢复SQL文本文件的步骤:
1.打开命令提示符或终端:在计算机上打开命令提示符或终端窗口。
1.导航到目录:使用cd命令导航到SQL文本文件所在的目录。

cd /path/to/directory

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

psql -U your_username -d your_database

your_username替换为PostgreSQL用户名,将your_database替换为要将SQL文件还原到的数据库的名称。
1.执行SQL文件:登录后,您可以使用\i命令和文件路径从文本文件执行SQL命令:

\i /path/to/your_sql_file.sql

/path/to/your_sql_file.sql替换为SQL文本文件的完整路径。
1.退出psql:执行SQL文件后,可以通过键入以下命令退出psql

\q

这将使您返回到命令提示符。
就是这样!您的SQL文本文件已恢复到PostgreSQL数据库中。确保SQL文件包含有效的SQL语句,并且与PostgreSQL数据库版本兼容。

gcmastyq

gcmastyq7#

我在下面得到了同样的错误:
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必须用于导入归档文件:

pg_restore -U john -d orange < backup.sql

所以,我用psql做了它,它必须用于导入非归档文件,然后我可以解决这个错误。* 我的答案解释了如何导出模式和数据,我的答案解释了如何导入它们:

psql -U john -f backup.sql orange
bgibtngc

bgibtngc8#

使用pgAdmin 4会更容易。
当通过pgAdmin将tar文件恢复到数据库时,您将收到此错误。我们通常会在这一点上卡住,忘记检查模式。
忽略错误。数据已加载并恢复。

相关问题