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)