据我了解,pg_repack创建一个临时的“镜像”表(表 B)并从原始表(表 A)复制行并重新索引它们,然后用镜像替换原始表。镜像步骤通过逻辑复制(一次插入大量)会产生很多噪音,所以我想忽略镜像表被复制。
不过,我对切换期间发生的事情有点困惑。丢失某些更改是否有风险?我认为没有,因为所有实际写入仍然会在切换之前和之后进入原始表,所以它应该是安全的吧?
我们在 AWS Aurora 上运行 Postgres 10.7,使用wal2json作为复制的输出插件。
要执行重新打包,pg_repack 将:
根据我的经验,日志表会保留所有更改并在构建索引后应用它们,此外,如果重新打包也需要回滚应用于原始表的更改。
我既没有使用 pg_repack 也没有使用逻辑复制,但根据 pg_repack Github 存储库,使用 pg_repack 和逻辑复制可能存在问题:请参阅 https://github.com/reorg/pg_repack/issues/135