2024年9月26日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:开发版
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4

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

47.8.1. 概述 #

逻辑解码可以用于构建与用于流式复制的同步复制相同用户界面的同步复制解决方案。为此,必须使用流式复制接口(参见第 47.3 节)来流出数据。客户端必须发送备用状态更新 (F)(参见第 53.4 节)消息,就像流式复制客户端一样。

注意

通过逻辑解码接收更改的同步副本将在单个数据库范围内工作。由于与之相反,synchronous_standby_names 目前是服务器范围的,这意味着如果使用多个数据库,此技术将无法正常工作。

47.8.2. 注意事项 #

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

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

  • 在事务中对 pg_class 执行 CLUSTER

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

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

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

请注意,这些命令不仅会导致上述系统目录表出现死锁,还会导致其他目录表出现死锁。

提交更正

如果您在文档中发现任何不正确的内容、与您对特定功能的体验不符或需要进一步说明的内容,请使用此表格报告文档问题。