从pg_dump恢复数据不会覆盖数据,但会将数据附加到原始数据库

时间:2017-04-28 08:14:59

标签: postgresql backup psql restore pg-dump

我正在使用" pg_dump database_name>来转储postgres数据库。 backup.sql&#34 ;.后来我在原始数据库(database_name)中进行了一些修改,然后我从备份文件(backup.sql)恢复数据。但结果是,数据库没有恢复到原始状态,而是将原始数据添加到修改后的数据(修改后的+原始)。我只是希望它恢复到原始状态,我应该删除数据库中的所有数据,然后从备份文件中恢复,因为它提供了数据库的原始状态。或者还有其他方法吗?

2 个答案:

答案 0 :(得分:4)

使用-c选项进行转储:pg_dump -c database_name > backup.sql。请参阅pg_dump文档。

答案 1 :(得分:2)

default format fo pg_dump是明确的,因此会创建COPY语句。因此,当您psq backup.sql时,您只需对现有数据运行copy。要重写数据,您应该先删除表格,或者pg_dump -F c and pg_restore -c

警告 - 在这两种情况下都会破坏旧数据(这似乎是你想要的)

  

-c   --clean清理(删除)数据库对象,然后重新创建它们。 (除非使用--if-exists,否则如果目标数据库中不存在任何对象,则可能会生成一些无害的错误消息。)

正如@Craig Ringer建议的那样,从备份中删除/重新创建将更容易和更清洁。要删除数据库,请运行DROP DATABASE au - 请注意,应该没有连接用户成功。然后你必须创建db:CREATE DATABASE au并运行psql -f backkup.sql -d au