PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

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

47.8.1. 架构概述
47.8.2. 死锁防范与注意事项

47.8.1. 架构概述 #

逻辑解码可以与同步复制方案结合使用,提供与物理流复制一致的用户体验。客户端必须通过流复制协议接口(参见 Section 47.3)建立连接,并定时向服务端反馈 Standby status update (F) 报文(参见 Section 54.4)。

Note

通过逻辑解码接收变更的同步副本在单数据库范围内运作。由于 synchronous_standby_names 当前是集群全局生效的,若集群中活跃使用多个数据库,该机制需要特别注意作用范围。

47.8.2. 死锁防范与注意事项 #

在同步复制拓扑中,如果用户事务排他性锁定了系统目录表或用户目录表,极易引发死锁(关于用户目录表参见 Section 47.6.2)。这是因为逻辑解码工作进程在解析日志时同样需要对系统目录加锁以读取元数据。为了避免死锁,必须杜绝在事务中对目录表施加排他锁,例如避免对 pg_class 执行显式 LOCK、在事务中对目录表执行 CLUSTER 或 TRUNCATE 等。