Redrock Postgres 搜索 英文
版本: 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

47.8. 支持逻辑解码的同步复制 #

47.8.1. 概述
47.8.2. 警告

47.8.1. 概述 #

逻辑解码可用于构建 同步复制 解决方案,该解决方案与适用于 流复制 的同步复制具有相同的用户界面。为此,流复制接口(参见 第 47.3 节)必须用于将数据流出。客户端必须发送 Standby status update (F)(参见 第 53.4 节)消息,与流复制客户端所做的一样。

注意

通过逻辑解码接收变更的同步副本将在单个数据库的范围内运行。既然与之相对应的是,synchronous_standby_names 当前为服务器范围,这意味着如果活动使用多个数据库,则此技术将无法正常运行。

47.8.2. 注意事项 #

在同步复制设置中,如果事务独占锁定了 [用户] 目录表,则会发生死锁。有关用户目录表的信息,请参见 第 47.6.2 节。这是因为事务的逻辑解码可以锁定目录表以访问它们。为避免这种情况,用户必须避免对 [用户] 目录表获取独占锁。这可能通过以下方式发生

  • 在事务中对 pg_class 发出显式 LOCK

  • 在事务中对 pg_class 执行 CLUSTER

  • 在对 pg_class 执行 LOCK 命令后 PREPARE TRANSACTION 并允许对两阶段事务进行逻辑解码。

  • 在对 pg_trigger 执行 CLUSTER 命令后 PREPARE TRANSACTION 并允许对两阶段事务进行逻辑解码。只有当发布的表具有触发器时,这才会导致死锁。

  • 在事务中对 [用户] 目录表执行 TRUNCATE

请注意,这些命令不仅可能导致对上述系统目录表发生死锁,而且可能导致对其他目录表发生死锁。