AnalyticDB PostgreSQL版Serverless模式提供了数据共享功能,可以实现跨实例查询共享数据。本文将指导您快速完成数据共享的创建和使用的全流程。
               
               
                  教程说明
                  请准备两个Serverless版本实例:实例A和实例B。实例A和实例B属于同一个阿里云账号,且位于同一地域。创建Serverless版本实例,请参见创建实例。
                  
                  本教程将为实例A和实例B开通数据共享。开通后,为实例A的源库创建一个Share,并将测试表加入Share,然后将Share授权给实例B的目标库。实例B的目标库在订阅Share后,可以查询源库测试表的数据。
               
               
                  操作步骤
                  
                     - 将Serverless版本实例加入数据共享。
                           - 登录云原生数据仓库AnalyticDB PostgreSQL版控制台。
- 在控制台左上角,选择实例所在地域。
- 在左侧导航栏中,单击数据共享。
- 在数据共享实例页面,选中需要加入数据共享的实例,单击添加。
                                 
                                    
 说明 只有加入数据共享的实例才能实现实例间共享数据。此处请选择至少两个实例。本教程中,实例A用于共享数据,实例B使用实例A共享的数据。
                                     
 
 
- 在添加共享实例对话框中,单击确定。
                                 
                                    
 说明 添加数据共享过程需要5~10分钟左右,添加成功后可以跨实例访问共享数据。
                                     
 
 
 
- 使用客户端工具分别连接实例A和实例B。具体操作,请参见客户端连接。本教程的客户端工具以psql和DMS为例。 
- 在实例A上创建源库,并查询源库的UUID。
                           - 在实例A上创建源库db01。
                           
- 查询源库的UUID为步骤8做准备。
                                 执行\c db01;切换到db01库,再执行以下语句查询UUID。
 SELECT current_database_uuid();
 
 
 
- 在实例B上创建目标库,并查询目标库的UUID。
                           - 在实例B上创建目标库db02。
                           
- 查询目标库的UUID为步骤5做准备。
                                 执行\c db02;切换到db02库,再执行以下语句查询UUID。
 SELECT current_database_uuid();
 
 
 
- 在源库上创建Share,并赋权给目标库。
                           - 切换至源库。
                                 
                                    - psql\c db01;
 
- DMS
                                       
                                          - 在左侧已登录实例中找到实例A。
                                          
- 单击db01库。
- 双击public Schema切换到目标库。
 
 您可以使用以下函数确认当前使用的数据库是否正确: SELECT current_database();
 返回信息如下时,表示当前使用的数据库为db01:  current_database
------------------
 db01
(1 row)
 
 
- 创建Share。
                           
- 将Share赋权给目标库。GRANT USAGE ON DATASHARE s01 TO DATABASE "<target_dbuuid>";
 <target_dbuuid>"为步骤4中查询到的目标库db02的UUID。
 
 
- 在源库db01中创建测试表t1_1,并在表中插入测试数据。CREATE TABLE t1_1 (a int, b int, c int, d int)  DISTRIBUTED BY (a);
INSERT INTO t1_1 SELECT v,v,v,v FROM generate_series(1, 10) AS v;
 表结构如下:  a  | b  | c  | d
----+----+----+----
  1 |  1 |  1 |  1
  2 |  2 |  2 |  2
  5 |  5 |  5 |  5
  6 |  6 |  6 |  6
  7 |  7 |  7 |  7
  9 |  9 |  9 |  9
 10 | 10 | 10 | 10
  3 |  3 |  3 |  3
  4 |  4 |  4 |  4
  8 |  8 |  8 |  8
(10 rows)
 
- 将测试表加入Share。ALTER DATASHARE s01 ADD TABLE t1_1;
 
- 为目标库db02订阅Share。
                           - 切换到目标库。
                                 
                                    - psql\c db02;
 
- DMS
                                       
                                          - 在左侧已登录实例中找到实例B。
                                          
- 单击db02库。
- 双击public Schema切换到目标库。
 
 您可以使用以下函数确认当前使用的数据库是否正确: SELECT current_database();
 返回信息如下时,表示当前使用的数据库为db02:  current_database
------------------
 db02
(1 row)
 
 
- 订阅Share,并设置Share的本地别名。IMPORT DATASHARE s01 AS s01a FROM DATABASE "<source_dbuuid>";
 <source_dbuuid>为步骤3中查询到的目标库db01的UUID。
 
 
- 在目标库db02中查询源库db01共享的数据。SELECT * FROM s01a.public.t1_1 ORDER BY 1;
 返回信息如下:  a  | b  | c  | d
----+----+----+----
  1 |  1 |  1 |  1
  2 |  2 |  2 |  2
  5 |  5 |  5 |  5
  6 |  6 |  6 |  6
  7 |  7 |  7 |  7
  9 |  9 |  9 |  9
 10 | 10 | 10 | 10
  3 |  3 |  3 |  3
  4 |  4 |  4 |  4
  8 |  8 |  8 |  8
(10 rows)