# 31.2.订阅
A.订阅是逻辑复制的下游。定义订阅的节点称为订阅人。订阅定义与另一个数据库的连接,以及它要订阅的一组发布(一个或多个)。
订阅服务器数据库的行为方式与任何其他PostgreSQL实例相同,可以通过定义自己的发布来用作其他数据库的发布服务器。
如果需要,订户节点可以有多个订阅。可以在单个发布服务器-订阅服务器对之间定义多个订阅,在这种情况下,必须注意确保订阅的发布对象不重叠。
每个订阅将通过一个复制插槽接收更改(请参阅第27.2.6节)。对于预先存在的表数据的初始数据同步,可能需要额外的复制插槽,这些插槽将在数据同步结束时删除。
逻辑复制订阅可以作为同步复制的备用订阅(请参阅)第27.2.8节)。默认情况下,备用名称为订阅名称。另一个名称可以指定为应用程序名称
在订阅的连接信息中。
订阅被垃圾场
如果当前用户是超级用户。否则会写入警告并跳过订阅,因为非超级用户无法从中读取所有订阅信息PGU订阅
目录
删除并重新创建订阅时,同步信息将丢失。这意味着之后必须重新同步数据。
不会复制架构定义,订阅服务器上必须存在已发布的表。只有常规表可能是复制的目标。例如,无法复制到视图。
这些表在发布服务器和订阅服务器之间使用完全限定的表名进行匹配。不支持复制到订阅服务器上不同名称的表。
表的列也按名称匹配。订阅服务器表中的列顺序不需要与发布服务器的列顺序匹配。只要数据的文本表示可以转换为目标类型,列的数据类型就不需要匹配。例如,可以从类型为的列进行复制整数
到类型的列比基特
。目标表还可以包含已发布表未提供的其他列。任何此类列都将使用目标表定义中指定的默认值填充。
# 31.2.1.复制插槽管理
如前所述,每个(活动)订阅都从远程(发布)端的复制插槽接收更改。
额外的表同步槽通常是暂时的,在内部创建以执行初始表同步,并在不再需要时自动删除。这些表同步插槽已生成名称:pg_%u_u同步_%u_%llu
“(参数:订阅*老年人
桌子重温
,系统标识符系统ID
*)
通常,使用创建订阅时会自动创建远程复制插槽创建订阅
当订阅被使用删除时,它会自动删除放弃订阅
。但是,在某些情况下,单独操作订阅和基础复制插槽可能是有用的或必要的。以下是一些场景:
创建订阅时,复制插槽已存在。在这种情况下,可以使用
create_slot=false
与现有插槽关联的选项。创建订阅时,远程主机无法访问或处于不清楚状态。在这种情况下,可以使用
connect=false
选项然后,将根本不联系远程主机。这就是pg_垃圾场使用。在激活订阅之前,必须手动创建远程复制插槽。删除订阅时,应保留复制插槽。当订阅者数据库被移动到另一台主机并将从那里激活时,这可能很有用。在这种情况下,使用
更改订阅
在尝试删除订阅之前。删除订阅时,无法访问远程主机。在这种情况下,使用
更改订阅
在尝试删除订阅之前。如果远程数据库实例不再存在,则无需进一步操作。但是,如果无法访问远程数据库实例,则应手动删除复制插槽(以及任何剩余的表同步插槽);否则它/他们将继续保留WAL,并可能最终导致磁盘填满。此类案件应仔细调查。