2

我已经备份pg_dumpall > test.out 并成功生成了test.out,因此备份完成。

我已使用命令 psql -f test.out postgres进行还原但在还原备份时出现以下错误:

databases already exists
relation "products" already exists
duplicate key value violates unique constraint "products_pkey"

我实际上想用备份替换现有数据库中的数据。怎么做?

4

3 回答 3

4

问题是您尝试恢复的数据库已经存在。

您可以运行DROP DATABASE database_name将删除现有数据库的命令,然后可以运行 test.out 文件。

或者您可以运行pgdumpall --clean > test.out然后运行生成的文件。clean 标志将使生成的文件中包含 DROP DATABASE 命令。

于 2019-01-04T23:48:04.103 回答
0

你使用波纹管命令吗?

 psql -h localhost -U [login role] database_name -f /home/database.backup
于 2019-01-04T23:50:06.137 回答
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

这样,您在创建备份文件时就不需要使用 clean。

于 2021-11-22T08:16:54.803 回答