历史版本。 PostgreSQL 13 已结束支持。 2025-11-13. 请参阅 当前版本手册.
48.8. 逻辑解码的同步复制支持 #
48.8.1. 概述
逻辑解码可用于构建同步复制方案,其用户接口与流复制的同步复制相同。要做到这一点,必须使用流复制接口(见第 48.3 节)来流式传出数据。客户端必须像流复制客户端一样发送 Standby status update (F)
消息(见第 52.4 节)。
注意
通过逻辑解码接收更改的同步副本,只能在单个数据库范围内工作。而与此不同,synchronous_standby_names 当前是整个服务器范围的,这意味着如果有多个数据库在被活跃使用,这种技术将无法正常工作。
48.8.2. 注意事项 #
在同步复制配置中,如果事务对目录表(包括用户目录表)加了排他锁,就可能发生死锁。参见第 48.6.2 节了解用户目录表。这是因为事务的逻辑解码可能会锁定目录表以访问它们。为避免这种情况,用户必须避免对目录表(包括用户目录表)获取排他锁。以下方式可能导致这种情况:
在事务中显式发出
LOCK命令来锁定pg_class。在事务中执行
CLUSTER命令处理pg_class。在事务中对目录表(包括用户目录表)执行
TRUNCATE。
注意,这些可能造成死锁的命令不仅适用于上面明确指出的系统目录表,也适用于其他任何目录表(包括用户目录表)。