Amazon RDS Postgresql 快照保留架构但丢失所有数据

Amazon RDS Postgresql snapshot preserves schema but loses all data

我使用 AWS RDS 控制台创建了包含多个模式的 Postgresql v11 数据库的快照备份。然后我从备份创建了一个新实例。该过程似乎工作正常,没有错误。但是,在检查新实例中的数据时,我注意到只有一个模式中的数据未保留。模式结构、tables、索引、约束等看起来不错,但是每个 table 都是空的(schema.table 中的 select count(*) 对于每个 table 在架构中)。所有其他模式看起来都很好并且包含预期的数据。我到处寻找(无法在线找到帮助)并在尝试解决此问题时自己尝试了许多测试(更改角色、重建模式、权限等等)。什么会导致我的快照保留整个架构结构,但丢失所有数据本身?

我终于意识到问题模式与其他模式之间的唯一区别是问题模式中的所有 table 都是使用 'UNLOGGED' 关键字创建的。这样做是为了提高首次构建架构时插入的数百万行的写入速度。但是,当快照是如上所述的 created/restored 时,该过程取决于用正常(记录)写入的 WAL 文件 tables 来恢复数据。为了解决我的问题,我简单地更改了所有 table 并将它们设置为记录(更改 table schema.table 设置记录)。在此之后,快照工作正常。对于将来做类似事情的任何其他人来说,如果初始大量数据填充需要未记录的 tables 以获得更好的写入速度,最好将它们更改为在初始数据填充后记录(如果您计划使用快照或复制或类似的)。旁注,pg_dump/pg_restore 仍然适用于未记录的 tables。