tds_fdw 拡張機能による SQL Server データベースの操作
PostgreSQL tds_fdw 拡張機能を使用して、Sybase や Microsoft SQL Server データベースなど、表形式データストリーム (TDS) プロトコルをサポートするデータベースにアクセスできます。この外部データラッパーを使用すると、RDS for PostgreSQL DB インスタンス を、Amazon RDS for Microsoft SQL Server を含む、TDS プロトコルを使用するデータベースに接続できます。詳細については、GitHub にある tds-fdw/tds_fdw
tds_fdw 拡張機能は、Amazon RDS for PostgreSQL のバージョン 14.2、13.6、およびそれ以降のリリースでサポートされています。
tds_fdw 拡張機能を使用するように Aurora PostgreSQL DB をセットアップする
次の手順では、tds_fdw をセットアップして、RDS for PostgreSQL DB インスタンスと使用する例を示します。tds_fdw を使用して SQL Server データベースに接続する前に、インスタンスの次の詳細を取得する必要があります。
ホスト名またはエンドポイント。RDS for SQL Server DB インスタンスの場合、コンソールを使用してエンドポイントを見つけることができます。[Connectivity & security] (接続とセキュリティ) タブを選択し、[Endpoint and port] (エンドポイントとポート) セクションを確認します。
ポート番号。Microsoft SQL Server のデフォルトポート番号は 1433 です。
データベースの名前 DB 識別子。
また、SQL Server ポート、1433 のセキュリティグループまたはアクセスコントロールリスト (ACL) でのアクセスを提供する必要があります。RDS for PostgreSQL DB インスタンスと RDS for SQL Server DB インスタンスの両方が、ポート 1433 にアクセスする必要があります。アクセスが正しく設定されていない場合、Microsoft SQL Server をクエリしようとすると、次のエラーメッセージが表示されます。
ERROR: DB-Library error: DB #: 20009, DB Msg: Unable to connect:
Adaptive Server is unavailable or does not exist (mssql2019.aws-region.rds.amazonaws.com), OS #: 0, OS Msg: Success, Level: 9
tds_fdw を使用して SQL Server データベースに接続するには
rds_superuserロールがあるアカウントを使用して、PostgreSQL DB インスタンスに接続します。psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=test –-passwordtds_fdw拡張機能をインストールします。test=>CREATE EXTENSION tds_fdw;CREATE EXTENSION
RDS for PostgreSQL DB インスタンスに拡張機能をインストールした後、外部サーバーをセットアップします。
外部サーバーを作成するには
rds_superuser 権限があるアカウントを使用する RDS for PostgreSQL DB インスタンスで次のタスクを実行します。
RDS for PostgreSQL DB インスタンスで外部サーバーを作成します。
test=>CREATE SERVERsqlserverdbFOREIGN DATA WRAPPER tds_fdw OPTIONS (servername 'mssql2019.aws-region.rds.amazonaws.com', port '1433', database 'tds_fdw_testing');CREATE SERVERSQLServer 側で非 ASCII データにアクセスするには、RDS for PostgreSQL DB インスタンスの character_set オプションを使用してサーバーリンクを作成します。
test=>CREATE SERVERsqlserverdbFOREIGN DATA WRAPPER tds_fdw OPTIONS (servername 'mssql2019.aws-region.rds.amazonaws.com', port '1433', database 'tds_fdw_testing', character_set'UTF-8');CREATE SERVERrds_superuserロール権限を持たないユーザーに、(例えばuser1として) 許可を付与します。test=>GRANT USAGE ON FOREIGN SERVERsqlserverdbTOuser1;user1 として接続し、SQL Server ユーザーへのマッピングを作成します。
test=>CREATE USER MAPPING FOR user1 SERVERsqlserverdbOPTIONS (username 'sqlserveruser', password 'password');CREATE USER MAPPINGSQL Server テーブルにリンクされた外部テーブルを作成します。
test=>CREATE FOREIGN TABLE mytab (a int) SERVERsqlserverdbOPTIONS (table 'MYTABLE');CREATE FOREIGN TABLE外部テーブルに対しクエリを実行します。
test=>SELECT * FROM mytab;a --- 1 (1 row)
接続に転送中の暗号化を使用する
RDS for PostgreSQL から SQL Server への接続には、SQL Server のデータベース設定に応じて、転送中の暗号化 (TLS/SSL) を使用します。SQL Server が暗号化用に設定されていない場合、SQL Server データベースへの要求を行う RDS for PostgreSQL クライアントは、暗号化されていない状態に戻ります。
rds.force_ssl パラメータを設定して、RDS for SQL Server DB インスタンスへの接続に暗号化を強制できます。この方法については、「DB インスタンスへの接続に SSL を使用させる」を参照してください。RDS for SQL Server での SSL/TLS 設定の詳細については、「Microsoft SQL Server DB インスタンスでの SSL の使用」を参照してください。