このトピックでは、PostgreSQLが提供するtds_fdw拡張機能を使用して、SQL Serverインスタンスのデータを照会する方法について説明します。
前提条件
RDSインスタンスのメジャーエンジンバージョンは、拡張機能でサポートされています。 詳細については、「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拡張子を作成します。
拡張子tds_fdwを作成します。
拡張機能を使用するUse the extension
次の文を実行してサーバーを作成します。
CREATEサーバーmssql_svr 外国データラッパーtds_fdw OPTIONS (サーバー名 '<SQL Serverインスタンスへの接続に使用されるエンドポイント>' 、ポート '<SQL Serverインスタンスへの接続に使用されるポート>' 、データベース 'tds_fdw_test '、tds_version '7.1');
説明servername
パラメーターは、SQL Serverインスタンスへの接続に使用される内部エンドポイントに設定し、port
パラメーターは、SQL Serverインスタンスへの接続に使用される内部ポートに設定する必要があります。外部テーブルを作成します。 次のいずれかの方法を使用して、外部テーブルを作成できます。
table_nameパラメーターを指定し、次のステートメントを実行して外部テーブルを作成します。
FOREIGNテーブルの作成mssql_table ( id整数、 データvarchar) サーバーmssql_svr オプション (table_name 'dbo.mytable '、row_estimate_method 'showplan_all');
schema_nameパラメーターとtable_nameパラメーターを指定し、次のステートメントを実行して外部テーブルを作成します。
FOREIGNテーブルの作成mssql_table ( id整数、 データvarchar) サーバーmssql_svr オプション (schema_name 'dbo' 、table_name 'mytable' 、row_estimate_method 'showplan_all');
クエリパラメーターを指定し、次のステートメントを実行して外部テーブルを作成します。
FOREIGNテーブルの作成mssql_table ( id整数、 データvarchar) サーバーmssql_svr オプション (クエリ 'SELECT * FROM dbo.mytable' 、row_estimate_method 'showplan_all');
外部列名を指定し、次のステートメントを実行して外部テーブルを作成します。
FOREIGNテーブルの作成mssql_table ( id整数、 col2 varchar OPTIONS (column_name 'data')) サーバーmssql_svr オプション (schema_name 'dbo' 、table_name 'mytable' 、row_estimate_method 'showplan_all');
次のステートメントを実行して、ユーザーマッピングを作成します。
postgresのユーザーマッピングを作成する サーバーmssql_svr オプション (ユーザー名 'sa' 、パスワード '123456');
次のステートメントを実行して、外部テーブルのスキーマをインポートします。
インポート外国スキーマdbo EXCEPT (mssql_table) サーバーからmssql_svr INTOパブリック オプション (import_default 'true');