数据订阅
创建订阅
CREATE SUBSCRIPTION
语句用于向当前数据库添加一个新的订阅。订阅的名称必须与当前数据库中任何现有订阅的名称不同。
所需权限
- 非三权分立模式下,用户对目标时序表有发布对应的
INSERT
权限。 - 三权分立模式下,用户是
sysadmin
角色的成员或者是对目标时序表有发布对应的INSERT
权限的普通用户。默认情况下,sysroot
用户属于sysadmin
角色。
语法格式
参数说明
参数 | 说明 |
---|---|
name | 待创建订阅的名称。该名称在当前数据库中必须唯一。 |
conninfo | 连接到发布者数据库的 libpq 字符串,格式为 postgresql://[userspec@][hostspec][/dbname][?paramspec] 。- 数据库 URI 参数支持 KaiwuDB 连接字符串,格式与主备功能保持一致。 - 连接串中的用户需要具有发布库或表的 SELECT 权限。 |
publication_name | 待订阅的发布的名称。同一个发布,只允许有一个运行中的订阅。同一个发布,不能被重复订阅。 |
subscription_parameter | 数据订阅参数。支持以下参数: - enable :指定创建订阅时是否启动复制。支持 on 和 off 两个取值。on 表示创建订阅时启动复制。off 表示创建订阅时不启动复制。- ignore_history :指定在复制开始时是否忽略发布表中已存在但未发布的数据。支持 on 和 off 两个取值。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 SUBSCRIPTIONS
或 SHOW 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 :指定创建订阅时是否启动复制。支持 on 和 off 两个取值。on 表示创建订阅时启动复制。off 表示创建订阅时不启动复制。默认情况下,设置为 on 。- ignore_history :指定在复制开始时是否忽略发布表中已存在但未发布的数据。支持 on 和 off 两个取值。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;