数据共享SQL

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

注意事项

  • 源库和目标库所属的实例在同一地域下,且已加入数据共享。如何将实例加入数据共享,请参见开通或关闭数据共享

  • 目前仅支持表级别数据共享。

  • 一个数据共享(Share)中最多可包含1000张表。

  • 当源实例中有多个Share时,目标库只能订阅其中一个Share。

  • 目标库无法对共享的表进行写操作。

  • 共享的表无法进行DDL操作,如果需要进行DDL操作,需要取消该表的共享。如何取消表的共享,请参见移除表

  • AnalyticDB PostgreSQL版Serverless模式目前都默认开通了索引功能,可以通过设置GUC参数的方式来强制写入OSS。

创建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 DATASHARE <share_name>;

参数说明

share_name:需要取消订阅的Share的名称。

使用示例

DROP DATASHARE s01;

查询数据

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

SELECT * FROM <share_name.schema_name.table_name>;

参数说明

share_name.schema_name.table_name:目标端查询的共享表名字,需为三段式表示:

  • 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();