tds_fdw 拡張を使用して、SQL Server データベース内のデータにアクセスします。
前提条件
-
RDS PostgreSQL インスタンスは、メジャーエンジンバージョン 11 以降を実行している必要があります。
-
インスタンスがメジャーエンジンバージョンの要件を満たしているにもかかわらず、この拡張をサポートしていない場合は、マイナーエンジンバージョンをアップグレードしてください。 たとえば、RDS PostgreSQL 17 インスタンスの場合、マイナーエンジンバージョンは 20241030 以降である必要があります。 手順については、「マイナーエンジンバージョンのアップグレード」をご参照ください。
-
RDS PostgreSQL インスタンスの VPC CIDR ブロック (
172.xx.xx.xx/16など) を、SQL Server インスタンスの IP アドレスホワイトリストに追加してください。説明RDS PostgreSQL インスタンスの [データベース接続] ページで、ネットワークタイプが VPC であることを確認し、VPC CIDR ブロック (
172.x.x.x/16など) をメモし、イントラネットポートが5432であることを確認します。
背景情報
tds_fdw は、Microsoft SQL Server など、表形式データ ストリーム (TDS) プロトコルを使用するデータベースに接続するための PostgreSQL 外部データラッパです。
詳細については、「tds_fdw の公式ドキュメント」をご参照ください。
拡張の作成
インスタンスに接続し、次のコマンドを実行します。
create extension tds_fdw;
拡張の使用
-
外部サーバを作成します。 例:
CREATE SERVER mssql_svr FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername '<endpoint>', port '<port>', 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'); -
queryオプションを使用します。 例: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');