今天我不小心将pg_dumpall文件恢复到生成该dumpall的数据库。这种恢复导致了大量的某些ID等重复。
这是一个复杂的生产数据库,它没有损坏整个数据库,但它确实影响了在使用它的网站上更改内容的能力。现在我知道我可以减少损失并将数据库重置为原始的pg_dumpall(它与昨晚相同),但这意味着在使用数据库的网站上进行一整天的工作/发布将会丢失。
我有什么办法可以解决这种情况吗?
答案 0 :(得分:1)
没有主键,这很难。使用主键,这不可能发生。你能做的最好的事情是,恕我直言:
schema
- > bad_schema
)schemas.tables
:添加从bad_schema.tableXXX
到schema.tableXXX
的行如果它们尚不存在(这可能需要(非唯一) bad_schema.XXX
上的索引,对应于预期的FK' 如果您不了解上述内容(或者如果工作量太大),只需承担损失,并安装昨天的备份。您可以首先重命名已损坏的数据库(或重命名模式),并尝试稍后从中提取新记录。
总结:确实意识到每个(部分)解决方案都需要以某种方式使用主键。没有PK的桌子很脆弱,毫无意义。