根据我的理解。pg_repack 创建一个临时的 "镜像 "表(表B),并从原表(表A)中复制行并重新索引,然后用镜像表替换原表。镜像步骤会对逻辑复制产生很大的噪音(一次插入很多数据),所以我想忽略镜像表的复制。
不过我对切换过程中发生的事情有点困惑。会不会有丢失一些更改的风险?我不认为有,因为在切换前后,所有的实际写入仍然会进入原始表,所以应该是安全的,对吗?
我们在AWS Aurora上运行Postgres 10.7,使用的是 wal2json 作为复制的输出插件。
我既没有使用过pg_repack,也没有使用过逻辑复制,但是根据pg_repack Github仓库,在使用pg_repack和逻辑复制的时候,有一个可能的问题:见 https:/github.comreorgpg_repackissues135。
要执行一个重新打包,pg_repack 将会
根据我的经验,日志表会保留所有的变化,并在建立索引后应用,另外如果重新打包也需要回滚应用在原表上的变化。