实例开通数据共享后,还需要通过SQL创建共享并授权,才能实现实例间的数据共享。本文介绍AnalyticDB PostgreSQL版Serverless模式数据共享相关SQL操作。

注意事项

  • 源库和目标库所属的实例在同一地域下,且已加入数据共享。如何将实例加入数据共享,请参见开通或关闭实例的数据共享
  • 目前仅支持表级别数据共享。
  • 一个数据共享(Share)中最多可包含1000张表。
  • 当源实例中有多个Share时,目标库只能订阅其中一个Share。
  • 目标库无法对共享的表进行写操作。
  • 共享的表无法进行DDL操作,如果需要进行DDL操作,需要取消该表的共享。如何取消表的共享,请参见移除表

创建Share

该语句用于在数据共享的源库中创建Share。

CREATE DATASHARE <share_name>;

参数说明:

参数 说明
share_name 需要创建的Share的名称。长度为1~90个字符。

示例:

CREATE DATASHARE s01;

删除Share

该语句用于删除数据库中的Share。Share被删除后,目标库将无法访问共享的数据。

DROP DATASHARE <share_name>;

参数说明:

参数 说明
share_name 需要删除的Share的名称。

示例:

DROP DATASHARE s01;

Share授权

该语句用于授权目标库对源库的Share的订阅权限。目标库需要取得Share的权限后才能进行订阅操作。

GRANT USAGE ON DATASHARE <share_name> TO DATABASE <target_id>;

参数说明:

参数 说明
share_name Share的名称。
target_id 目标库的ID,格式为UUID形式。如何获取数据库的ID,请参见查询数据库ID

示例:

GRANT USAGE ON DATASHARE s01 TO DATABASE "c227516c-3802-4974-86e9-53**********";

回收Share权限

该语句用于回收目标库订阅Share的权限。回收权限后,目标库将无法访问共享的数据。

REVOKE USAGE ON DATASHARE <share_name> FROM DATABASE <target_id>;

参数说明:

参数 说明
share_name Share的名称。
target_id 目标库的ID,格式为UUID形式。如何获取数据库的ID,请参见查询数据库ID

示例:

REVOKE USAGE ON DATASHARE s01 FROM DATABASE "c227516c-3802-4974-86e9-53**********";

添加表

该语句用于将表添加到Share中。添加表后,即可在订阅了该Share的目标库中查看该表。

ALTER DATASHARE <share_name> ADD TABLE <table_name>;

参数说明:

参数 说明
share_name Share的名称。
table_name 需要添加到Share中的表。

示例:

ALTER DATASHARE s01 ADD TABLE t1_1;

移除表

该语句用于将表从Share中移除。

ALTER DATASHARE <share_name> REMOVE TABLE <table_name>;

参数说明:

参数 说明
share_name Share的名称。
table_name 需要从Share中移除的表。

示例:

ALTER DATASHARE s01 REMOVE TABLE t1_1;

订阅Share

该语句用于在目标库上订阅源库的Share。目标库要查询共享的数据,需要取得源库Share的授权并订阅Share。

IMPORT DATASHARE <share_name> [AS <local_share_name>] FROM DATABASE <source_id>;

参数说明:

参数 说明
share_name 需要订阅的Share的名称。
local_share_name 为订阅的Share设置别名。
source_id 源库ID,为UUID形式。如何获取数据库的ID,请参见查询数据库ID

示例:

IMPORT DATASHARE s01 AS s01a FROM DATABASE "c227516c-3802-4974-86e9-53**********";

取消订阅Share

该语句用于取消订阅Share。取消订阅后,目标库将无法访问共享的数据。

DROP SHARE <share_name>;

参数说明:

参数 说明
share_name 需要取消订阅的Share的名称。

示例:

DROP SHARE s01;

查询数据

该语句用于在目标库中查询数据共享的数据。

SELECT * FROM <share_name.schema_name.table_name>;

参数说明:

参数 说明
share_name.schema_name.table_name 目标端查询的共享表名字,需为3段式表示:
  • share_name:Share的本地别名(若没有设置别名可使用Share的名称)。
  • schema_name:共享表所在源库的Schema的名称。
  • table_name:共享表的表名。

示例:

SELECT * FROM s01.public.t1_1;

查询数据库ID

查询数据库的ID,ID为UUID格式。

说明 查询数据库ID的语句仅支持查询当前数据库的ID,如需查询其他数据库的ID,请切换到对应数据库中执行查询语句。
SELECT current_database_uuid();