输入文件似乎是文本格式转储.请使用psql

Has*_*mad 51 postgresql backup pg-restore

我使用备份

pg_dump db_production > postgres_db.dump
Run Code Online (Sandbox Code Playgroud)

然后我使用scp将其复制到localhost.

现在,当我导入我的本地数据库时,它会出错

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.
Run Code Online (Sandbox Code Playgroud)

通过使用commad行

pg_restore -d db_development postgres_db.dump
Run Code Online (Sandbox Code Playgroud)

Зел*_*ный 80

在你投票之前

这只是文档的一部分!

pg_dump文档:

例子

要将名为mydb的数据库转储到SQL脚本文件中:

$ pg_dump mydb > db.sql
Run Code Online (Sandbox Code Playgroud)

要将这样的脚本重新加载到名为newdb的(新创建的)数据库中:

$ psql -d newdb -f db.sql
Run Code Online (Sandbox Code Playgroud)

要将数据库转储到自定义格式的归档文件中:

$ pg_dump -Fc mydb > db.dump
Run Code Online (Sandbox Code Playgroud)

要将数据库转储到目录格式存档中:

$ pg_dump -Fd mydb -f dumpdir
Run Code Online (Sandbox Code Playgroud)

要将存档文件重新加载到名为newdb的(新创建的)数据库中:

$ pg_restore -d newdb db.dump
Run Code Online (Sandbox Code Playgroud)

pg_restore文档:

例子

假设我们将名为mydb的数据库转储到自定义格式的转储文件中:

$ pg_dump -Fc mydb > db.dump
Run Code Online (Sandbox Code Playgroud)

要删除数据库并从转储中重新创建它:

$ dropdb mydb
$ pg_restore -C -d postgres db.dump
Run Code Online (Sandbox Code Playgroud)

  • 这不回答这个问题 (17认同)
  • IMO 这篇文章有太多的细节混淆了答案。作者没有指出的是,'-F' 参数的 pg_dump 文档没有说默认格式('p'/'plain')适用于 pg_restore。pg_restore 要求 pg_dump 与 'c'、'd' 或 't' 格式一起使用。 (10认同)
  • 当我执行 pg_restore 我得到 pg_restore: [archiver] 输入文件似乎是一个文本格式转储。请使用 psql。 (2认同)
  • 有关从文本文件恢复的方法,请查看https://serverfault.com/questions/260607/pg-dump-and-pg-restore-input-file-does-not-appear-to-be-a-valid-档案 (2认同)

Uzi*_*dez 27

上面的答案对我不起作用,这有效:

psql db_development < postgres_db.dump

  • 简短而甜蜜。也为我工作过。 (3认同)
  • 工作得很好。我只需添加 -U,例如 psql -Umyuser db_development &lt; postgres_db.dump (3认同)

小智 21

对我来说,当我尝试从我使用的远程主机恢复时

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump
Run Code Online (Sandbox Code Playgroud)

工作正常。如果不是远程,只需遵循以下命令即可。

psql -d database < db.dump
Run Code Online (Sandbox Code Playgroud)


Tim*_*her 18

为了使用pg_dump兼容的方式创建备份,pg_restore您必须在创建转储时使用--format=custom/ -Fc

从文档:

输出适合输入到 pg_restore 的自定义格式存档。

所以你的pg_dump命令可能看起来像:

pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password
Run Code Online (Sandbox Code Playgroud)

还有你的pg_restore命令:

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump
Run Code Online (Sandbox Code Playgroud)

  • 这个答案最能解决实际问题。 (6认同)

小智 8

对我来说,它就像这样工作。

C:\Program Files\PostgreSQL\12\bin> psql -U postgres -p 5432  -d dummy -f C:\Users\Downloads\d2cm_test.sql
Run Code Online (Sandbox Code Playgroud)

  • 简单而有用的答案! (2认同)

小智 7

如果恢复.SQL 文件。 在 pgAdmin 中创建一个新数据库。转到终端并导航 .sql 文件所在的文件夹/目录。然后在终端中写入以下命令。

语法: supername user postgres psql newDatabasename < inputfile.sql

示例:

sudo -u postgres psql newDb < restoreDb.sql
Run Code Online (Sandbox Code Playgroud)


小智 7

当尝试使用 DBeaver 备份数据库时,我遇到了同样的错误。如果有人在 Windows 上使用 DBeaver 界面而不是命令行,请确保在备份和恢复设置期间选择的格式为tar在此输入图像描述


小智 5

psql -U <username> -d <database-name> -h <host-name> -f <backup.sql>