Bra*_*ler 1 postgresql snapshot relational-database amazon-web-services missing-data
我使用 AWS RDS 控制台创建了包含多个架构的 Postgresql v11 数据库的快照备份。然后我从备份创建了一个新实例。该过程似乎运行良好,没有错误。然而,在检查新实例中的数据时,我注意到只有一个模式中的数据未保留。模式结构、表、索引、约束等看起来不错,但每个表都是空的(模式中每个表的 select count(*) from schema.table 都是 0)。所有其他模式看起来都很好并且包含预期的数据。在尝试解决这个问题时,我到处寻找(无法在网上找到有关此问题的帮助),并自己尝试了许多测试(更改角色、重建架构、权限等等)。什么会导致我的快照保留整个架构结构,但丢失所有数据本身?
我终于意识到问题模式与其他模式之间的唯一区别是问题模式中的所有表都是使用“UNLOGGED”关键字创建的。这样做是为了提高首次构建架构时插入的数百万行的写入速度。然而,当如上所述创建/恢复快照时,该过程依赖于用普通(记录)表写入的WAL文件来恢复数据。为了解决我的问题,我简单地更改了所有表并将它们设置为记录(alter table schema.table setlogging)。此后,快照工作正常。对于将来做类似事情的其他人来说,如果初始大量数据填充需要未记录的表以获得更好的写入速度,最好将它们更改为在初始数据填充后记录(如果您计划使用快照或复制或类似)。旁注,pg_dump/pg_restore 仍然适用于未记录的表。