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

PolarDB:ネットワークチャネルを介したデータベース間のデータの照会

最終更新日:Aug 12, 2024

PolarDB for PostgreSQL (Oracle互換) クラスターは、ネットワークチャネル機能を提供します。 ネットワークチャネルを使用して、外部データラッパー (FDW) 外部テーブル、dblink、データベースリンクなどのさまざまな方法を使用して、他のデータベースのデータにアクセスできます。 このトピックでは、ネットワークチャネルを介してデータベース間でデータをクエリする方法について説明します。

前提条件

  • ソースクラスターとデスティネーションクラスターが作成されます。 詳細については、「クラスターの作成」をご参照ください。

説明

PolarDB for PostgreSQL (Oracle互換) のネットワークチャネル機能は、次のモードをサポートしています。

  • ソースは PolarDB for PostgreSQL (Oracle互換) クラスターです。 移行先はPolarDB for PostgreSQLまたはPolarDB for PostgreSQL (Compatible with Oracle) クラスターです。

  • ソースは PolarDB for PostgreSQL (Oracle互換) クラスターです。 移行先は、Elastic Compute Service (ECS) インスタンスでホストされている自己管理型PostgreSQLデータベースです。

  • データベースは、ソースおよび宛先クラスターに作成されます。 詳細については、「データベース管理」をご参照ください。

  • ターゲットクラスタデータベースにテーブルが作成されます。

制限事項

移行先クラスターのデータは、移行元クラスターからのみ照会できます。 移行元クラスターのデータを移行先クラスターからクエリすることはできません。

手順

  1. ネットワークチャネルを作成します。

    次のいずれかの方法を使用して、 PolarDB for PostgreSQL (Compatible with Oracle) のネットワークチャネルを作成できます。

  2. ソースクラスターに接続します。 詳細については、「クラスターへの接続」をご参照ください。

  3. さまざまな方法を使用して、ネットワークチャネルを介してソースクラスタから宛先クラスタのデータを照会します。

次の図に示すように、コンソールでネットワークチャネル名とネットワークチャネルに対応するターゲットクラスターを表示できます。

image

FDW外部テーブルを使用してデータにアクセスする

重要

postgres_fdw拡張子が必要です。 CREATE EXTENSIONステートメントを使用して、拡張機能を作成します。

1. ソースクラスターで、外部データラッパーpostgres_fdwを使用するサーバーmyserverを作成します。 channel_nameの値をchltestに設定します。これはネットワークチャネルの名前です。 dbnameの値をfoodbに設定します。これは、移行先クラスターでアクセスするデータベースの名前です。

CREATE SERVER myserver FOREIGN DATA WRAPPER postgres_fdw OPTIONS (channel_name 'chltest', dbname 'foodb');

2. ソースクラスターで、postgres_fdwのユーザーbobとサーバーmyserverのユーザーマッピングを作成します。 OPTIONSのuserパラメーターをbobに設定します。これは、ターゲットクラスターにアクセスするユーザーです。

CREATE USER MAPPING FOR bob SERVER myserver OPTIONS (user 'bob', password 'mypassword');

3. ソースクラスターに外部テーブルforeign_tableを作成し、サーバーmyserverからテーブルにアクセスします。

CREATE FOREIGN TABLE foreign_table (
 id integer NOT NULL,
 data text
)SERVER myserver
OPTIONS (table_name 'test');

4. ターゲットデータベースにテーブルテストを作成し、テストデータをテーブルに挿入します。 実行するステートメントは、次のとおりです。

CREATE TABLE test(id integer NOT NULL, data text);
INSERT INTO test VALUES(1,'test');

5. ソースクラスターに接続し、次のクエリを実行します。

SELECT * FROM foreign_table
id | data 
----+------
 1 | test
(1 row)

詳細については、「データベースリンクと外部テーブル」をご参照ください。

データベースリンクを使用したデータへのアクセス

重要

postgres_fdw拡張子が必要です。 CREATE EXTENSIONステートメントを使用して、拡張機能を作成します。

1. データベースリンクpg_dblinkを作成します。 次のステートメントでは、bobはリモートデータベースへの接続に使用されるユーザーの名前です。 channel_nameの値は、ネットワークチャネルであるchltestに設定されます。 dbnameの値は、リモートデータベースの名前であるfoodbに設定されます。

CREATE DATABASE LINK pg_dblink
 CONNECT TO bob IDENTIFIED BY "mypassword"
 USING (channel_name 'chltest', dbname 'foodb'); 

2. ターゲットデータベースにテーブルテストを作成し、テストデータをテーブルに挿入します。 実行するステートメントは、次のとおりです。

CREATE TABLE test(id integer NOT NULL, data text);
INSERT INTO test VALUES(1,'test');

3. データベースリンクを使用して、テストテーブルのデータを照会します。

SELECT * FROM test@pg_dblink
id | data 
----+------
 1 | test
(1 row)

詳細については、「CREATE [PUBLIC] DATABASE LINK」をご参照ください。