选择 打开 改范围 完整检索页
受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本的对应页面,或其他在上面列出的活跃大版本。

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

48.8.1. 概述

逻辑解码可用于构建 同步复制方案,其用户接口 与 流复制 的同步复制相同。要做到这一 点,必须使用流复制接口(见 Section 48.3)来流式传出数据。客户端必须像 流复制客户端一样发送 Standby status update (F) 消息(见 Section 52.4)。

Note

通过逻辑解码接收更改的同步副本,只能在单个数据库范围内工作。而与此不同, synchronous_standby_names 当前是整个服务器范围 的,这意味着如果有多个数据库在被活跃使用,这种技术将无法正常工作。

48.8.2. 注意事项 #

在同步复制配置中,如果事务对[用户]系统目录表加了排他锁,就可能发生死锁。参见Section 48.6.2了解用户系统目录表。这是因为事务的逻辑解码可能会锁定系统目录表以访问它们。为避免这种情况,用户必须避免对[用户]系统目录表获取排他锁。以下方式可能导致这种情况:

  • 在事务中显式发出 LOCK 命令来锁定 pg_class

  • 在事务中执行 CLUSTER 命令处理 pg_class

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

注意,这些可能造成死锁的命令不仅适用于上面明确指出的系统目录表,也适用于其他任何[用户]系统目录表。