逻辑订阅故障转移(Failover Slot) 本章节会介绍RDS for PostgreSQL的逻辑订阅故障转移能力 使用场景 RDS for PostgreSQL的逻辑订阅故障转移(Failover Slot)功能用来将那些指定为failover slot的逻辑复制槽信息从主实例同步到备实例,当主备切换之后逻辑订阅能够继续进行,实现逻辑复制槽的故障转移。 当用户使用逻辑复制时,由于slot信息不会随着主备切换转移到新的主实例上,一旦实例发生主备切换,逻辑订阅就会断开,此时除非手动重新创建slot,否则逻辑订阅无法重新连接。RDS for PostgreSQL的Failover Slot功能可以将所有的logical slot从主实例同步到备实例,避免主备切换后逻辑订阅断开。 注意事项 该功能针对RDS for PostgreSQL 12.6及以上的小版本、RDS for PostgreSQL 13及以上版本的所有小版本。 当前只支持logical slot的故障转移,physical slot暂不支持。 该功能由于引入新的日志类型,因此一旦使用了该功能,通过备份文件恢复到新实例时,会保留旧的slot信息,恢复到新实例后需要手动删除slot信息。 使用方法 在发布端执行如下SQL,创建一个Failover Slot: 命令及参数说明 版本 命令 参数说明 PostgreSQL12和PostgreSQL13版本 SELECT FROM pgcreatelogicalreplicationslot( 'slotname' ,'pgoutput' , false, true); slotname表示logical slot的名称。 pgoutput表示plugin的名称,也可以更改为其他支持的插件。 第三个参数(例如false),表示该slot是否为临时slot。l第四个参数(例如true),表示该slot是否为Failover Slot。 PostgreSQL14及以上版本 SELECT FROM pgcreatelogicalreplicationslot( 'slotname' ,'pgoutput' , false, false, true); slotname表示logical slot的名称。 pgoutput表示plugin的名称,也可以更改为其他支持的插件。 第三个参数(例如false),表示该slot是否为临时slot。 第四个参数(例如true),表示是否启动两阶段提交选项。 第五个参数(例如true),表示该复制槽是否为Failover slot。 因此,如果要创建一个Failover Slot,在第三个参数临时slot字段必须为false,最后一个参数必须为true。如果最后一个参数省略不写,则创建的是非Failover Slot。