我正在学习 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
。
到目前为止我的流程如下:
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) 和具有角色 dvdrental
的数据库 postgres
。
当你可以成功地从提取的文件夹恢复数据库后
在尝试了几个小时后,对我有用的是以下命令。从 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 解压后的目录。
如果您在
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。
在“恢复”对话框中,“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"
要将 SQL 文本文件恢复到 PostgreSQL 数据库中,您可以使用
psql
命令行工具,该工具通常用于与 PostgreSQL 数据库交互。以下是恢复 SQL 文本文件的步骤:
打开命令提示符或终端:在计算机上打开命令提示符或终端窗口。
导航到目录:使用
cd
命令导航到 SQL 文本文件所在的目录。
cd /path/to/directory
登录 PostgreSQL:使用
psql
命令登录 PostgreSQL 数据库。您需要提供用户名和数据库名称作为参数。您可能还需要输入密码。
psql -U your_username -d your_database
将
your_username
替换为您的 PostgreSQL 用户名,并将 your_database
替换为要将 SQL 文件还原到的数据库的名称。
执行 SQL 文件:登录后,您可以使用
\i
命令后跟文件路径来从文本文件执行 SQL 命令:
\i /path/to/your_sql_file.sql
将
/path/to/your_sql_file.sql
替换为 SQL 文本文件的完整路径。
退出 psql:SQL 文件执行完毕后,您可以通过输入以下命令退出
psql
:
\q
这将使您返回到命令提示符。
就是这样!您的 SQL 文本文件已恢复到 PostgreSQL 数据库中。确保您的 SQL 文件包含有效的 SQL 语句并且与您的 PostgreSQL 数据库版本兼容。
我在下面遇到了同样的错误:
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
使用pgAdmin 4会更容易。
通过 pgAdmin 将 tar 文件恢复到数据库时,您将收到此错误。我们通常会在这一点上陷入困境并忘记检查架构。
忽略该错误。数据已加载并恢复。