我刚刚尝试在一个相当大的PostgreSQL数据库集群上从8.3.0版升级到9.0.4版。在目标集群上创建新模式之前,一切看起来都会正常工作。出于某种原因,它两次尝试创建一个组角色都失败了。
在查看了所有脚本之后,很明显它复制了一个组角色4次。我备份了8.3.0数据库,很明显pg_authid
表中有一行重复出现。
我试图以单用户模式启动数据库,以便尝试REINDEX TABLE pg_authid
。尝试创建具有重复值的新索引时失败。
我试着删除这个令人讨厌的角色。这删除了pg_authid
中4行中的一行,但似乎进一步混淆了问题。
我看到有人提到在桌面上运行一个完整的真空可以修复这样的腐败,但我对这样的工作几乎没有希望。所以,在数据恢复的同时,我会寻找一些想法。
最佳答案
您是否考虑过修改pg_升级,以便在继续升级之前,按照sean的建议修复错误的语句?我相信系统表的pg_upgrade中正在发生转储/还原。
关于database - 如何在PostgreSQL中修复损坏的系统表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6180065/