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

Son*_*pta 6 postgresql backup restore pg-dump psql

我正在使用“ pg_dump database_name> backup.sql”对postgres数据库进行转储。稍后,我将对原始数据库(数据库名称)进行一些修改,然后从备份文件(backup.sql)还原数据。但是结果是数据库没有恢复到原始状态,而是将原始数据添加到修改后的数据(修改后的+原始)中,我只希望它恢复到原始状态,我是否应该删除所有从备份文件还原数据库之前,先从数据库中还原数据,因为它提供了数据库的原始状态。还是有其他方法可以做到这一点?

Vao*_*sun 5

默认格式 FO pg_dump是平原,所以它创建了一个COPY声明。因此,当您psql backup.sql仅对copy现有数据运行这些数据时。要重写数据,您应该删除表的第一或pg_dump -F c pg_restore -c

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

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

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


小智 5

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