文档下载建议反馈入口

  • 创建订阅
  • 查看订阅
  • 修改订阅
  • 删除订阅

数据订阅

创建订阅

CREATE SUBSCRIPTION 语句用于向当前数据库添加一个新的订阅。订阅的名称必须与当前数据库中任何现有订阅的名称不同。

所需权限

  • 非三权分立模式下,用户对目标时序表有发布对应的 INSERT 权限。
  • 三权分立模式下,用户是 sysadmin 角色的成员或者是对目标时序表有发布对应的 INSERT 权限的普通用户。默认情况下,sysroot 用户属于 sysadmin 角色。

语法格式

参数说明

参数说明
name待创建订阅的名称。该名称在当前数据库中必须唯一。
conninfo连接到发布者数据库的 libpq 字符串,格式为 postgresql://[userspec@][hostspec][/dbname][?paramspec]
- 数据库 URI 参数支持 KaiwuDB 连接字符串,格式与主备功能保持一致。
- 连接串中的用户需要具有发布库或表的 SELECT 权限。
publication_name待订阅的发布的名称。同一个发布,只允许有一个运行中的订阅。同一个发布,不能被重复订阅。
subscription_parameter数据订阅参数。支持以下参数:
- enable:指定创建订阅时是否启动复制。支持 onoff 两个取值。on 表示创建订阅时启动复制。off 表示创建订阅时不启动复制。
- ignore_history:指定在复制开始时是否忽略发布表中已存在但未发布的数据。支持 onoff 两个取值。on 表示忽略发布表中已存在的数据。off 表示不忽略发布表中已存在的数据。默认情况下,设置为 off
- retry:订阅连接失败后,最大重试次数。支持的取值范围为 0-10。默认情况下,设置为 5
- target:JSON 格式的字符串,用于指定发布者和订阅者的表名。当该参数取值为空时,数据库、模式和表的名称在发布实例和订阅实例内需要完全对应。
说明
- 目标表必须与发布表完全对应。
- 目标表要包含发布表的字段,无论指定字段或全部字段,且字段名称需要保持一致。
- 建议时间戳类型的数据指定精度。如果发布端不指定时间戳精度,系统以订阅端默认值为准。
- 字符和字节类型的数据需要指定长度。并且订阅端的数据长度需要大于等于发布端的数据长度。
value数据订阅参数的取值。

语法示例

以下示例创建一个订阅,订阅 pub_cpu 发布端的数据,包括历史数据和通过 INSERT 语句写入的实时数据。

CREATE SUBSCRIPTION sub_cpu CONNECTION 'postgresql://user1@127.0.0.1:26257/dbname?ssl=disable' PUBLICATION pub_cpu WITH OPTIONS (target='{"benchmark.public.cpu":"benchmark.public.sub_cpu"}');

查看订阅

SHOW SUBSCRIPTIONSSHOW SUBSCRIPTION 语句用于查看所有或指定订阅的信息,包括订阅名称、发布名称、连接串、订阅参数、当前状态、开始时间、结束时间、错误信息、创建者、创建时间等重要信息。

所需权限

语法格式

参数说明

参数说明
name待查看订阅的名称。

返回字段说明

字段说明
sub_name数据订阅的名称。
pub_name数据发布的名称。
conn数据订阅的连接串信息。
parameter数据订阅的指定参数。
status数据订阅的当前状态。
start_time数据订阅的开始时间。
end_time数据订阅的结束时间。
error_message数据订阅的错误信息。
create_by数据订阅的创建者。
create_at数据订阅的创建时间。

语法示例

以下示例查看 sub_cpu 数据订阅的详细信息。

SHOW SUBSCRIPTION sub_cpu;

修改订阅

ALTER SUBSCRIPTION 语句用于修改订阅。

说明

当订阅处于开启状态时,不支持修改订阅。如需修改,需要先停止订阅。

所需权限

  • 非三权分立模式下,用户为 admin 角色的成员或者数据订阅的创建者。
  • 三权分立模式下,用户为 sysadmin 角色的成员或者数据订阅的创建者。

语法格式

参数说明

参数说明
name待修改订阅的名称。
conninfo连接到发布者数据库的 libpq 字符串,格式为 postgresql://[userspec@][hostspec][/dbname][?paramspec]
- 数据库 URI 参数支持 KaiwuDB 连接字符串,格式与主备功能保持一致。
- 连接串中的用户需要具有发布库或表的 SELECT 权限。
publication_name待修改发布的名称。
subscription_parameter待修改的数据订阅参数。支持以下参数:
- enable:指定创建订阅时是否启动复制。支持 onoff 两个取值。on 表示创建订阅时启动复制。off 表示创建订阅时不启动复制。默认情况下,设置为 on
- ignore_history:指定在复制开始时是否忽略发布表中已存在但未发布的数据。支持 onoff 两个取值。on 表示忽略发布表中已存在的数据。off 表示不忽略发布表中已存在的数据。默认情况下,设置为 off
- retry:订阅连接失败后,最大重试次数。支持的取值范围为 0-10。默认情况下,设置为 5
- target:JSON 格式的字符串,用于指定发布者和订阅者的表名。当该参数取值为空时,数据库、模式和表的名称在发布实例和订阅实例内需要完全对应。
说明
- 目标表必须与发布表完全对应。
- 目标表要包含发布表的字段,无论指定字段或全部字段,且字段名称需要保持一致。
- 建议时间戳类型的数据指定精度。如果发布端不指定时间戳精度,系统以订阅端默认值为准。
- 字符和字节类型的数据需要指定长度。并且订阅端的数据长度需要大于等于发布端的数据长度。
value数据订阅参数的取值。

语法示例

以下示例启动 sub_cpu 订阅。

ALTER SUBSCRIPTION sub_cpu SET OPTIONS (enable = 'on');

删除订阅

DROP SUNSCRIPTION 语句用于删除指定的数据订阅。

所需权限

  • 非三权分立模式下,用户为 admin 角色的成员或者数据订阅的创建者。
  • 三权分立模式下,用户为 sysadmin 角色的成员或者数据订阅的创建者。

语法格式

参数说明

参数说明
IF EXISTS可选关键字。当使用 IF EXISTS 关键字时,如果目标订阅存在,系统删除目标订阅。如果目标发布不存在,系统删除目标订阅失败,但不会报错。当未使用 IF EXISTS 关键字时,如果目标订阅存在,系统删除目标订阅。如果目标订阅不存在,系统报错,提示目标订阅不存在。
name待删除订阅的名称。

语法示例

以下示例删除 sub1 数据订阅。

DROP PUBLICATION sub_cpu;