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


90

我使用备份

pg_dump db_production > postgres_db.dump

然后使用scp将其复制到localhost。

现在,当我导入本地数据库时,它给出了一个错误

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

通过使用逗号

pg_restore -d db_development postgres_db.dump

Answers:


133

来自 pg_dump文档中:

例子

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

$ pg_dump mydb > db.sql

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

$ psql -d newdb -f db.sql

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

$ pg_dump -Fc mydb > db.dump

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

$ pg_dump -Fd mydb -f dumpdir

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

$ pg_restore -d newdb db.dump

pg_restore文档中:

例子

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

$ pg_dump -Fc mydb > db.dump

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

$ dropdb mydb
$ pg_restore -C -d postgres db.dump

2
当我执行pg_restore时,我得到pg_restore:[存档]输入文件似乎是文本格式的转储。请使用psql。
Haseeb Ahmad

我使用哪一个还原数据库?
Haseeb Ahmad

66
这不能回答问题
dopatraman

1
一种方式,从文本文件签恢复serverfault.com/questions/260607/...
CHRS

5
IMO的这篇文章有太多细节,使答案难以理解。作者未能指出的是,'-F'参数的pg_dump文档没有说默认格式('p'/'plain')适用于pg_restore。pg_restore要求pg_dump与'c','d'或't'格式一起使用。
马特


11

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

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump

工作正常。如果不是远程,则仅执行以下命令即可。

psql -d database < db.dump

7

为了使用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

和您的pg_restore命令:

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump

6

对我来说,它就像这样工作。 C:\ Program Files \ PostgreSQL \ 12 \ bin> psql -U postgres -p 5432 -d虚拟-f C:\ Users \ Downloads \ d2cm_test.sql


2
简单而有用的答案!
Rax Weber

1
谢谢@RAJNISH YADAV。
艾米特

0

如果将pg_dump与-Fp一起使用以纯文本格式进行备份,请使用以下命令:

cat db.txt | psql dbname

将所有数据复制到名称为dbname的数据库中


0

如果您有完整的数据库转储:

PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql

但是,如果将模式分别保存,则将无法正常工作。然后,您需要禁用类似于的数据插入触发器pg_restore --disable-triggers。然后,您可以使用以下命令:

cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin

从侧面说,我认为这是postgres的一个非常不幸的缺点。在中创建转储的默认方法与pg_dump不兼容pg_restore。但是,有了一些附加键。WTF?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.