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