すべてのプロダクト
Search
ドキュメントセンター

:リモート AnalyticDB データソースアクセス

最終更新日:Apr 03, 2025

AnalyticDB for PostgreSQL のリモート AnalyticDB データソースアクセス機能を使用して、インスタンスと同じ Alibaba Cloud アカウントに属する他の AnalyticDB for PostgreSQL インスタンスのデータにアクセスできます。この機能を使用すると、外部データソースに対して結合クエリを実行できるため、データの適時性が確保され、データ冗長性が削減されます。

インスタンス間のクエリには、少なくとも 2 つのインスタンスが関係します。区別するために、クエリを開始するインスタンスをローカルインスタンス、外部データソースとして機能するインスタンスをリモートインスタンスと呼びます。

サポートされているバージョン

  • AnalyticDB for PostgreSQL V6.0: V6.6.0.0 以降。

  • AnalyticDB for PostgreSQL V7.0: V7.0.3.0 以降。

  • サーバーレスモードの AnalyticDB for PostgreSQL: V2.1.1.5 以降。

説明

AnalyticDB for PostgreSQL インスタンスのマイナーバージョンの表示方法については、「インスタンスのマイナーバージョンを表示する」をご参照ください。 AnalyticDB for PostgreSQL インスタンスが上記の要件を満たしていない場合は、インスタンスのマイナーバージョンを更新することをお勧めします。詳細については、「UpgradeDBVersion」をご参照ください。

前提条件

ローカルインスタンスとリモートインスタンスは、同じ Virtual Private Cloud(VPC)内に存在する必要があります。

準備

この例では、ローカルインスタンス A とリモートインスタンス B でインスタンス間のクエリが実行されます。ローカルインスタンス A の local_db データベースからリモートインスタンス B の remote_db データベース内のテーブルにアクセスして、結合クエリを実行できます。

  1. ローカルインスタンス A とリモートインスタンス B の初期アカウントを作成します

  2. クライアントの IP アドレスまたは CIDR ブロックを、ローカルインスタンス A とリモートインスタンス B のIP アドレスホワイトリストに追加します。

  3. テストデータを準備します。

    • ローカルインスタンス A で、外部テーブルを作成し、リモートインスタンス B のデータにアクセスするためのデータベースとスキーマを作成します。

      1. ローカルインスタンス A に接続します。

        psql -h gp-bp166cyrtr4p*****-master.gpdb.rds.aliyuncs.com -p 5432 -d postgres -U gpdbaccount
        Elastic Compute Service(ECS)インスタンスが AnalyticDB for PostgreSQL インスタンスと同じ VPC 内に存在しない場合、またはオンプレミスデバイスから AnalyticDB for PostgreSQL インスタンスに接続する場合は、インスタンスのパブリックエンドポイントを使用します。
      2. ローカルインスタンス A で、local_db という名前のデータベースを作成し、local_db データベースに切り替えます。

        CREATE DATABASE local_db;
        \c local_db
      3. ローカルインスタンス A の local_db データベースにスキーマを作成します。

        CREATE SCHEMA s02;
    • リモートインスタンス B で、ローカルインスタンス A からリモートインスタンス B のテーブルデータをクエリするためのデータベースとテーブルを作成します。

      1. ローカルインスタンス A に接続するのと同じ方法で、リモートインスタンス B に接続します。

      2. リモートインスタンス B で、remote_db という名前のデータベースを作成し、remote_db データベースに切り替えます。

        CREATE DATABASE remote_db;
        \c remote_db
      3. リモートインスタンス B の remote_db データベースにテストデータを準備します。

        CREATE SCHEMA s01;
        
        CREATE TABLE s01.t1(a int, b int, c text); 
        CREATE TABLE s01.t2(a int, b int, c text); 
        CREATE TABLE s01.t3(a int, b int, c text); 
        
        INSERT INTO s01.t1 VALUES(generate_series(1,10),generate_series(11,20),'t1');
        INSERT INTO s01.t2 VALUES(generate_series(11,20),generate_series(11,20),'t2');
        INSERT INTO s01.t3 VALUES(generate_series(21,30),generate_series(11,20),'t3');

手順

ステップ 1: ローカルインスタンスにデータソースを追加する

  1. AnalyticDB for PostgreSQL コンソールにログオンします。 ローカルインスタンス A を見つけて、インスタンス ID をクリックします。

  2. 左側のナビゲーションウィンドウで、[外部データソース管理] をクリックします。

  3. [リモート Analyticdb データソースアクセス] タブをクリックし、[データソースの追加] をクリックします。 表示されるパネルで、次の表に示すパラメータを設定します。

    パラメータ

    説明

    ローカルインスタンス ID

    ローカルインスタンス A の ID。 このパラメータは自動的に指定されます。

    ローカルデータベース名

    ローカルインスタンス A 上のデータベースの名前。 この例では、local_db が使用されています。

    ローカル初期アカウント

    ローカルインスタンス A の初期アカウント。 初期アカウントを作成済みの場合は、このパラメータを指定する必要はありません。

    ローカル初期パスワード

    初期アカウントのパスワード。

    リモートインスタンス ID

    リモートインスタンス B の ID。

    リモートデータベース名

    リモートインスタンス B 上のデータベースの名前。 この例では、remote_db が使用されています。

    リモート初期アカウント

    リモートインスタンス B の初期アカウント。

    リモート初期パスワード

    初期アカウントのパスワード。

    データソース名

    データソースの名前。 例: example_name。

  4. [OK] をクリックします。 データソースの接続ステータスが [実行中] に変わったら、インスタンス間でデータをクエリできます。

    説明
    • データソースを追加した後、データソースの接続ステータスは [リモート Analyticdb データソースを追加しています] に変わります。 このプロセスには約 1 分未満かかり、インスタンスの作成やデータの読み取り/書き込み操作には影響しません。

    • データソースが追加された後、次の操作を実行できます。

      • [アクション] 列の [編集] をクリックして、リモートインスタンスのデータベースアカウントとパスワードを変更します。

      • [アクション] 列の [削除] をクリックして、データソースを削除します。

ステップ 2: インスタンス間でデータをクエリする

重要

リモート AnalyticDB for PostgreSQL インスタンスがサーバーレスモードの場合、スケーリング状態のインスタンスのデータにはアクセスできません。

  1. ローカルインスタンス A に接続し、local_db データベースの s02 スキーマに切り替えます。

  2. ローカルインスタンス A の s02 スキーマで、リモートインスタンス B の t1、t2、t3 テーブルの外部テーブルを作成します。

    重要

    ローカルインスタンスのスキーマには、リモートテーブルと同じ名前のテーブルを含めることはできません。 そうしないと、操作は失敗します。

    複数のテーブルを一度にインポートする

    構文:

    IMPORT FOREIGN SCHEMA remote_schema -- リモートインスタンスのスキーマ名。
        [LIMIT TO ( table_name [, ...] ) ] -- リモートインスタンスのテーブル名。
        FROM SERVER server_name -- ステップ 1 で設定したデータソース名。
        INTO local_schema -- ローカルインスタンスのスキーマ名。

    例:

    IMPORT FOREIGN SCHEMA s01 LIMIT TO (t1, t2, t3) 
    	FROM SERVER example_name INTO s02;
    説明

    構文の詳細については、IMPORT FOREIGN SCHEMA を参照してください。

    単一のテーブルをインポートする

    構文:

    CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ -- リモートインスタンスのテーブル名。
      { column_name data_type } ] -- リモートインスタンスのテーブル構造。
        [, ... ] )
      SERVER server_name -- ステップ 1 で設定したデータソース名。
    [ OPTIONS ( option 'value' [, ... ] ) ] -- ローカルインスタンスのスキーマ名とテーブル名。

    例:

    CREATE FOREIGN TABLE s01.t1(a int, b int) 
    	SERVER example_name OPTIONS(schema_name 's02', table_name 't1');
    説明

    構文の詳細については、CREATE FOREIGN TABLE を参照してください。

  3. ローカルインスタンス A の local_db データベースからリモートインスタンス B の remote_db データベース内の t1 テーブルのデータをクエリします。

    説明

    AnalyticDB for PostgreSQL では、Database.Schema.Table 形式でデータにアクセスすることはできません。

    SELECT * FROM s02.t1;

    結果例:

     a  | b  | c
    ----+----+----
      2 | 12 | t1
      3 | 13 | t1
      4 | 14 | t1
      7 | 17 | t1
      8 | 18 | t1
      1 | 11 | t1
      5 | 15 | t1
      6 | 16 | t1
      9 | 19 | t1
     10 | 20 | t1
    (10 rows)

関連情報

データベース間のクエリ: 同じインスタンス内のデータベース間でデータをクエリする方法について説明します。