订阅(Subscription)是逻辑复制的下游接收端,定义在订阅节点上。订阅声明了连接到远端发布库的网络连接串,以及其所订阅的一个或多个发布名:
CREATE SUBSCRIPTION mysub
CONNECTION 'host=192.168.1.50 port=5432 user=repuser dbname=mydb'
PUBLICATION mypub;
执行该命令时,系统会在远端发布库上自动创建一个配套的逻辑复制槽(Replication Slot),用于持久锁定发布端的 WAL 日志保留进度,确保断网重连时不丢数据。
订阅端的数据表必须预先手动建好表结构(逻辑复制仅复制数据变更,不复制 DDL 建表语句)。表名通过完整的模式限定名精准对齐。字段列按名称匹配,订阅端的字段顺序无需与发布端一致,甚至可以包含发布端不存在的额外带默认值的列。
订阅端在后台自动在发布端关联一个逻辑复制槽,以保证断点续传且防止发布端 WAL 日志提前被回收。
标准创建订阅示例:
CREATE SUBSCRIPTION mysub CONNECTION 'host=pubhost dbname=pubdb user=repuser password=secret' PUBLICATION mypub;
在主备切换或复杂网络拓扑中,可以在创建订阅时指定 create_slot = false,以便手动预置或跨节点复用逻辑复制槽。