pg_repack和逻辑复制:在运行pg_repack时,是否有遗漏表的更改的风险?

问题描述 投票:0回答:2

根据我的理解。pg_repack 创建一个临时的 "镜像 "表(表B),并从原表(表A)中复制行并重新索引,然后用镜像表替换原表。镜像步骤会对逻辑复制产生很大的噪音(一次插入很多数据),所以我想忽略镜像表的复制。

不过我对切换过程中发生的事情有点困惑。会不会有丢失一些更改的风险?我不认为有,因为在切换前后,所有的实际写入仍然会进入原始表,所以应该是安全的,对吗?

我们在AWS Aurora上运行Postgres 10.7,使用的是 wal2json 作为复制的输出插件。

postgresql logical-replication
2个回答
0
投票

我既没有使用过pg_repack,也没有使用过逻辑复制,但是根据pg_repack Github仓库,在使用pg_repack和逻辑复制的时候,有一个可能的问题:见 https:/github.comreorgpg_repackissues135。


0
投票

要执行一个重新打包,pg_repack 将会

  1. 创建一个日志表来记录对原表的修改。
  2. 在原表上添加一个触发器,将INSERTs, UPDATEs, 和DELETEs记录到我们的日志表中。
  3. 创建一个新表,包含旧表中的所有记录。
  4. 在这个新表上建立索引。
  5. 将日志表中发生的所有变化应用到新表中。
  6. 使用系统目录交换表,包括索引和吐司表。
  7. 丢弃原来的表。

根据我的经验,日志表会保留所有的变化,并在建立索引后应用,另外如果重新打包也需要回滚应用在原表上的变化。

© www.soinside.com 2019 - 2024. All rights reserved.