154

我使用备份

pg_dump db_production > postgres_db.dump

然后我使用 scp 将它复制到本地主机。

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

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

通过使用命令行

pg_restore -d db_development postgres_db.dump
4

10 回答 10

172

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
于 2016-11-16T12:34:32.377 回答
94

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

psql db_development < postgres_db.dump

于 2018-08-24T17:41:22.693 回答
31

为了使用与您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
于 2019-12-12T15:16:57.063 回答
28

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

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

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

psql -d database < db.dump
于 2019-11-11T05:22:55.937 回答
9

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

C:\Program Files\PostgreSQL\12\bin> psql -U postgres -p 5432  -d dummy -f C:\Users\Downloads\d2cm_test.sql
于 2020-03-31T13:16:47.933 回答
2

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

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_dumppg_restore. 然而,有了一些额外的键,它是。怎么回事?

于 2019-11-22T13:27:24.427 回答
1

如果您使用带有 -Fp 的 pg_dump 以纯文本格式备份,请使用以下命令:

cat db.txt | psql dbname

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

于 2018-09-05T13:56:53.057 回答
1

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

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

示例:

sudo -u postgres psql newDb < restoreDb.sql
于 2021-12-27T08:44:27.937 回答
0

可能当您创建备份时,您想在另一个网络中恢复它或创建远程恢复。

我们需要使用--format=custom[ -Fc] 创建一个备份文件,然后使用pg_restore. 我们可以使用连接字符串并将,和postgresql://<user>:<pass>@localhost:5432/<dbname>替换为您的信息。<user><pass><dbname>

pg_dump -v -Fc \
postgresql://<user>:<pass>@localhost:5432/<dbname> \
> db-20211122-163508.sql

要恢复,我们将使用--clean[ -c] 和--create[ -C] 调用它,以便在恢复之前删除数据库。将<user><host><port>和替换<dbname>为您的信息。

pg_restore -vcC \
-U <user> \
-h <host> \
-p <port> \
-d <dbname> \
< db-20211122-163508.sql
于 2021-11-22T08:09:59.147 回答
0

如果你用这种方式备份,我想这会更容易导入数据库。

pg_dump -h(远程数据库地址)-a --column-inserts -U postgres(数据库名)>(文件名).sql

对于进口,

psql
-f (文件名).sql
--host (远程数据库地址)
--port 5432
--username postgres
--password (你的密码)
--dbname (你要导入的数据库)

于 2021-11-29T09:30:10.590 回答