逻辑解码可用于构建与 同步复制 具有相同用户界面的 流复制 同步复制解决方案。为此,必须使用流复制接口(参见 第 47.3 节)来流式传输数据。客户端必须发送 Standby status update (F)
(参见 第 54.4 节)消息,就像流复制客户端所做的那样。
通过逻辑解码接收更改的同步副本将在单个数据库的范围内工作。相反,由于 synchronous_standby_names
当前是服务器范围的,这意味着如果使用一个以上的数据库,此技术将无法正常工作。
在同步复制设置中,如果事务已独占锁定 [用户] 目录表,则可能发生死锁。有关用户目录表的信息,请参见 第 47.6.2 节。这是因为事务的逻辑解码可能会锁定目录表以访问它们。为避免此问题,用户必须避免对 [用户] 目录表采取独占锁。这可能以以下方式发生:
在事务中对 pg_class
发出显式的 LOCK
。
在事务中对 pg_class
执行 CLUSTER
。
在对 pg_class
执行 LOCK
命令后执行 PREPARE TRANSACTION
,并允许对两阶段事务进行逻辑解码。
在对 pg_trigger
执行 CLUSTER
命令后执行 PREPARE TRANSACTION
,并允许对两阶段事务进行逻辑解码。这仅在发布的表有触发器时才会导致死锁。
在事务中对 [用户] 目录表执行 TRUNCATE
。
请注意,这些命令不仅可能导致上述系统目录表死锁,还可能导致其他目录表死锁。
如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表格 报告文档问题。