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

47.8.1. 总览
47.8.2. 注意事项

47.8.1. 总览

逻辑解码可以被用来构建 同步复制方案,该方案 具有和流复制的同步复制 相同的用户接口。要这样做,流复制接口(见 Section 47.3)必须被用来流式传出数据。 正如流复制客户端所作的一样,逻辑解码的客户端必须发出 后备机状态更新 (F) (见Section 51.4)消息。

Note

一个通过逻辑解码接收更改的同步复制机将工作在一个单一数据库的范围内。 因为与之相反,synchronous_standby_names 当前是服务器范围的,这意味着如果有多于一个数据库被活跃地使用,这种技术将 无法正常工作。

47.8.2. 注意事项

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

  • 在事务中对pg_class进行显式的LOCK操作。

  • 在事务中对pg_class执行CLUSTER操作。

  • 在事务中对[user]目录表执行TRUNCATE操作。

请注意,上述可能导致死锁的命令不仅适用于上面明确指定的系统目录表,也适用于任何其他[user]目录表。