无法恢复PostgreSQL数据库,出现“数据库已存在”错误

4

我已经通过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"

我想用备份数据替换现有数据库中的数据。如何操作?

3个回答

7

问题在于你尝试恢复的数据库已经存在。

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

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


pgdumpall --clean > test.out 对我很有效,感谢@Gregory Arenius。 - Mohamed Al Ameen

0
你使用下面的命令吗?
 psql -h localhost -U [login role] database_name -f /home/database.backup

不,它不能工作,因为我正在使用多个数据库,即我为每个用户创建一个单独的数据库。因此,我无法逐个备份每个数据库。 - Mohamed Al Ameen

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命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接