このトピックでは、PostgreSQLが提供するtds_fdw拡張機能を使用して、SQL Serverインスタンスのデータを照会する方法について説明します。
前提条件
RDSインスタンスはPostgreSQL 11以降のバージョンを実行します。
説明この拡張機能は、PostgreSQL 17を実行するApsaraDB RDS for PostgreSQLインスタンスではサポートされていません。
RDSインスタンスのメジャーエンジンバージョンが要件を満たしているが、拡張機能がまだサポートされていない場合、RDSインスタンスのマイナーエンジンバージョンが更新されます。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
RDSインスタンスが存在する仮想プライベートクラウド (VPC) のCIDRブロックを、接続するSQL Serverインスタンスのホワイトリストに追加する必要があります。 例:
172.xx. xx.xx/16
説明ApsaraDB RDSコンソールの [データベース接続] ページで、RDSインスタンスが存在するVPCのCIDRブロックを表示できます。
背景情報
tds_fdw拡張子は、PostgreSQLによって提供される外部データラッパー (FDW) です。 拡張機能を使用して、表形式データストリーム (TDS) プロトコルを使用するMicrosoft SQL Serverインスタンスなどの外部インスタンスに接続できます。
詳細については、「postgres_fdw」をご参照ください。
tds_fdw拡張子を作成する
SQL Serverインスタンスに接続した後、次のステートメントを実行してtds_fdw拡張子を作成します。
create extension tds_fdw;
拡張機能を使用するUse the extension
次の文を実行してサーバーを作成します。
CREATE SERVER mssql_svr FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername '<Endpoint used to connect to the SQL Server instance>', port '<Port used to connect to the SQL Server instance>', database 'tds_fdw_test', tds_version '7.1');
説明servername
パラメーターは、SQL Serverインスタンスへの接続に使用される内部エンドポイントに設定し、port
パラメーターは、SQL Serverインスタンスへの接続に使用される内部ポートに設定する必要があります。外部テーブルを作成します。 次のいずれかの方法を使用して、外部テーブルを作成できます。
table_nameパラメーターを指定し、次のステートメントを実行して外部テーブルを作成します。
CREATE FOREIGN TABLE mssql_table ( id integer, data varchar) SERVER mssql_svr OPTIONS (table_name 'dbo.mytable', row_estimate_method 'showplan_all');
schema_nameパラメーターとtable_nameパラメーターを指定し、次のステートメントを実行して外部テーブルを作成します。
CREATE FOREIGN TABLE mssql_table ( id integer, data varchar) SERVER mssql_svr OPTIONS (schema_name 'dbo', table_name 'mytable', row_estimate_method 'showplan_all');
クエリパラメーターを指定し、次のステートメントを実行して外部テーブルを作成します。
CREATE FOREIGN TABLE mssql_table ( id integer, data varchar) SERVER mssql_svr OPTIONS (query 'SELECT * FROM dbo.mytable', row_estimate_method 'showplan_all');
外部列名を指定し、次のステートメントを実行して外部テーブルを作成します。
CREATE FOREIGN TABLE mssql_table ( id integer, col2 varchar OPTIONS (column_name 'data')) SERVER mssql_svr OPTIONS (schema_name 'dbo', table_name 'mytable', row_estimate_method 'showplan_all');
次のステートメントを実行して、ユーザーマッピングを作成します。
CREATE USER MAPPING FOR postgres SERVER mssql_svr OPTIONS (username 'sa', password '123456');
次のステートメントを実行して、外部テーブルのスキーマをインポートします。
IMPORT FOREIGN SCHEMA dbo EXCEPT (mssql_table) FROM SERVER mssql_svr INTO public OPTIONS (import_default 'true');