AnalyticDB PostgreSQL版Serverless模式提供了数据共享功能,可以实现跨实例查询共享数据。本文将指导您快速完成数据共享的创建和使用的全流程。

教程说明

请准备两个Serverless版本实例:实例A和实例B。实例A和实例B属于同一个阿里云账号,且位于同一地域。创建Serverless版本实例,请参见创建实例

本教程将为实例A和实例B开通数据共享。开通后,为实例A的源库创建一个Share,并将测试表加入Share,然后将Share授权给实例B的目标库。实例B的目标库在订阅Share后,可以查询源库测试表的数据。

操作步骤

  1. 将Serverless版本实例加入数据共享。
    1. 登录云原生数据仓库AnalyticDB PostgreSQL版控制台
    2. 在控制台左上角,选择实例所在地域。
    3. 在左侧导航栏中,单击数据共享
    4. 数据共享实例页面,选中需要加入数据共享的实例,单击添加
      说明 只有加入数据共享的实例才能实现实例间共享数据。此处请选择至少两个实例。本教程中,实例A用于共享数据,实例B使用实例A共享的数据。
    5. 添加共享实例对话框中,单击确定
      说明 添加数据共享过程需要5~10分钟左右,添加成功后可以跨实例访问共享数据。
  2. 使用客户端工具分别连接实例A和实例B。具体操作,请参见客户端连接
    本教程的客户端工具以psql和DMS为例。
  3. 在实例A上创建源库,并查询源库的UUID。
    1. 在实例A上创建源库db01。
      CREATE DATABASE db01;
    2. 查询源库的UUID为步骤8做准备。

      执行\c db01;切换到db01库,再执行以下语句查询UUID。

      SELECT current_database_uuid();
  4. 在实例B上创建目标库,并查询目标库的UUID。
    1. 在实例B上创建目标库db02。
      CREATE DATABASE db02;
    2. 查询目标库的UUID为步骤5做准备。

      执行\c db02;切换到db02库,再执行以下语句查询UUID。

      SELECT current_database_uuid();
  5. 在源库上创建Share,并赋权给目标库。
    1. 切换至源库。
      • psql
        \c db01;
      • DMS
        1. 在左侧已登录实例中找到实例A。
        2. 单击db01库。
        3. 双击public Schema切换到目标库。

      您可以使用以下函数确认当前使用的数据库是否正确:

      SELECT current_database();

      返回信息如下时,表示当前使用的数据库为db01:

       current_database
      ------------------
       db01
      (1 row)
    2. 创建Share。
      CREATE DATASHARE s01;
    3. 将Share赋权给目标库。
      GRANT USAGE ON DATASHARE s01 TO DATABASE "<target_dbuuid>";

      <target_dbuuid>"为步骤4中查询到的目标库db02的UUID。

  6. 在源库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)
  7. 将测试表加入Share。
    ALTER DATASHARE s01 ADD TABLE t1_1;
  8. 为目标库db02订阅Share。
    1. 切换到目标库。
      • psql
        \c db02;
      • DMS
        1. 在左侧已登录实例中找到实例B。
        2. 单击db02库。
        3. 双击public Schema切换到目标库。

      您可以使用以下函数确认当前使用的数据库是否正确:

      SELECT current_database();

      返回信息如下时,表示当前使用的数据库为db02:

       current_database
      ------------------
       db02
      (1 row)
    2. 订阅Share,并设置Share的本地别名。
      IMPORT DATASHARE s01 AS s01a FROM DATABASE "<source_dbuuid>";

      <source_dbuuid>为步骤3中查询到的目标库db01的UUID。

  9. 在目标库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)

相关文档