从pg_dump还原数据不会覆盖数据,但会将数据追加到原始数据库



我使用" pg_dump database_name> backup.sql"来获取Postgres数据库的转储。后来,我在原始数据库(Database_name(中进行了一些修改,然后我正在恢复备份文件(backup.sql(的数据。但是结果是,数据库不会恢复到原始状态,而是将原始数据添加到修改后的数据(修改后的 原始(。我只想将其还原到原始状态,我应该删除所有从备份文件恢复数据库之前,数据库的数据,因为它给出了数据库的原始状态。还是有其他方法可以做?

默认格式fo pg_dump是普通的,因此创建COPY语句。因此,当您psql backup.sql时,您只需在现有数据上运行这些copy即可。要重写数据,您应该先删除表或pg_dump -F cpg_restore -c

警告 - 在这两种情况下,它将破坏旧数据(虽然这似乎是您想要的(

-c - 清洁清洁(Drop(数据库对象在重新创建它们之前。(除非使用 - 如果使用了 - 如果目的地数据库中没有任何对象,则可能会生成一些无害的错误消息。(

正如@craig Ringer所建议的那样,从备份中丢弃/重新创建会更容易,更干净。要删除数据库,您运行DROP DATABASE au-请注意,不应有连接的用户成功。然后,您必须创建DB:CREATE DATABASE au并运行psql -f backup.sql -d au

带有-c选项的转储:pg_dump -c database_name > backup.sql。请参阅pg_dump文档。

最新更新