サーバーレスモードのAnalyticDB for PostgreSQLは、インスタンス間でデータを共有およびクエリするためのデータ共有機能を提供します。 このトピックでは、データ共有機能の使用方法について説明します。
説明
サーバーレスモードの2つのAnalyticDB for PostgreSQLインスタンスが必要です。 これらの2つのインスタンスは、同じAlibaba Cloudアカウントに属し、同じリージョン内に存在する必要があります。 サーバーレスモードでAnalyticDB For PostgreSQLインスタンスを作成する方法の詳細については、「インスタンスの作成」をご参照ください。
このトピックでは、インスタンスAとインスタンスBのデータ共有を有効にします。次に、インスタンスaのソースデータベースの共有を作成し、その共有にテストテーブルを追加して、インスタンスBのターゲットデータベースにその共有を使用する権限を付与します。 インスタンスBのターゲットデータベースの共有をサブスクライブした後、インスタンスBのターゲットデータベースからテストテーブルに含まれるデータを照会できます。
手順
データ共有のためにサーバーレスモードでAnalyticDB for PostgreSQLインスタンスを追加します。
AnalyticDB for PostgreSQLコンソールにログインします。
コンソールの左上隅で、インスタンスが存在するリージョンを選択します。
左側のナビゲーションウィンドウで、[データ共有] をクリックします。
データ共有インスタンス タブで、データ共有用に追加するインスタンスを選択し、追加 をクリックします。
説明データは、データ共有用に追加されたインスタンス間でのみ共有できます。 少なくとも2つのインスタンスを選択します。 このトピックでは、インスタンスAはデータを共有し、インスタンスBはインスタンスAが共有するデータを消費します。
共有インスタンスの追加 メッセージで、OK をクリックします。
説明このプロセスは完了するのに5〜10分かかることがある。 これら2つのインスタンスがデータ共有のために追加された後、共有データをインスタンス間で照会できます。
クライアントツールを使用してインスタンスaとインスタンスBに接続します。詳細については、「クライアント接続」をご参照ください。
このトピックでは、クライアントツールpsqlとデータ管理 (DMS) を使用します。
インスタンスaにソースデータベースを作成し、ソースデータベースの汎用一意識別子 (UUID) を照会します。
インスタンスaにdb01という名前のソースデータベースを作成します。
CREATE DATABASE db01;
後で手順8で使用するために、ソースデータベースのUUIDを照会します。
\c db01;
を実行してdb01データベースに切り替え、次のステートメントを実行してUUIDを照会します。SELECT current_database_uuid();
インスタンスBでターゲットデータベースを作成し、ターゲットデータベースのUUIDを照会します。
インスタンスBにdb02という名前のターゲットデータベースを作成します。
CREATE DATABASE db02;
後で手順5で使用するために、ターゲットデータベースのUUIDを照会します。
\c db02;
を実行してdb02データベースに切り替え、次のステートメントを実行してUUIDを照会します。SELECT current_database_uuid();
ソースデータベースの共有を作成し、共有を使用するようにターゲットデータベースに権限を付与します。
ソースデータベースに切り替えます。
psql
\c db01;
DMS
左側のナビゲーションウィンドウで、[接続済みインスタンス] をクリックし、インスタンスAを見つけます。
ソースデータベースdb01をクリックします。
パブリックスキーマをダブルクリックして、ターゲットデータベースに切り替えます。
次のステートメントを実行して、db02が使用されているかどうかを確認できます。
SELECT current_database();
現在のデータベースがdb01の場合、次の情報が返されます。
current_database ------------------ db01 (1 row)
共有を作成します。
CREATE DATASHARE s01;
共有を使用するようにターゲットデータベースに許可します。
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)
共有にテーブルを追加します。
ALTER DATASHARE s01 ADD TABLE t1_1;
ターゲットデータベースdb02の共有をサブスクライブします。
ターゲットデータベースに切り替えます。
psql
\c db02;
DMS
左側のナビゲーションウィンドウで、[接続済みインスタンス] をクリックし、インスタンスBを見つけます。
移行先データベースdb02をクリックします。
パブリックスキーマをダブルクリックして、ターゲットデータベースに切り替えます。
次のステートメントを実行して、db02が使用されているかどうかを確認できます。
SELECT current_database();
現在のデータベースがdb02の場合、次の情報が返されます。
current_database ------------------ db02 (1 row)
共有をサブスクライブし、移行先データベースの共有のエイリアスを設定します。
IMPORT DATASHARE s01 AS s01a FROM DATABASE "<source_dbuuid>";
<source_dbuuid>
は、手順3で照会されるdb01のUUIDを指定します。
移行元データベースdb01が共有するデータを移行先データベースdb02から照会します。
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)