

# tds\$1fdw 拡張機能による SQL Server データベースの操作
<a name="postgresql-tds-fdw"></a>

PostgreSQL `tds_fdw` 拡張機能を使用して、Sybase や Microsoft SQL Server データベースなど、表形式データストリーム (TDS) プロトコルをサポートするデータベースにアクセスできます。この外部データラッパーを使用すると、RDS for PostgreSQL DB インスタンス を、Amazon RDS for Microsoft SQL Server を含む、TDS プロトコルを使用するデータベースに接続できます。詳細については、GitHub にある [tds-fdw/tds\$1fdw](https://github.com/tds-fdw/tds_fdw) に関するドキュメントを参照してください。

`tds_fdw` 拡張機能は、Amazon RDS for PostgreSQL のバージョン 14.2、13.6、およびそれ以降のリリースでサポートされています。

## tds\$1fdw 拡張機能を使用するように Aurora PostgreSQL DB をセットアップする
<a name="postgresql-tds-fdw-setting-up"></a>

次の手順では、`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\$1fdw を使用して SQL Server データベースに接続するには**

1. `rds_superuser` ロールがあるアカウントを使用して、PostgreSQL DB インスタンスに接続します。

   ```
   psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=test –-password
   ```

1. `tds_fdw` 拡張機能をインストールします。

   ```
   test=> CREATE EXTENSION tds_fdw;
   CREATE EXTENSION
   ```

 RDS for PostgreSQL DB インスタンスに拡張機能をインストールした後、外部サーバーをセットアップします。

**外部サーバーを作成するには**

`rds_superuser` 権限があるアカウントを使用する RDS for PostgreSQL DB インスタンスで次のタスクを実行します。

1. RDS for PostgreSQL DB インスタンスで外部サーバーを作成します。

   ```
   test=> CREATE SERVER sqlserverdb FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername 'mssql2019.aws-region.rds.amazonaws.com', port '1433', database 'tds_fdw_testing');
   CREATE SERVER
   ```

   SQLServer 側で非 ASCII データにアクセスするには、RDS for PostgreSQL DB インスタンスの character\$1set オプションを使用してサーバーリンクを作成します。

   ```
   test=> CREATE SERVER sqlserverdb FOREIGN DATA WRAPPER tds_fdw OPTIONS (servername 'mssql2019.aws-region.rds.amazonaws.com', port '1433', database 'tds_fdw_testing', character_set 'UTF-8');
   CREATE SERVER
   ```

1. `rds_superuser` ロール権限を持たないユーザーに、(例えば `user1` として) 許可を付与します。

   ```
   test=> GRANT USAGE ON FOREIGN SERVER sqlserverdb TO user1;
   ```

1. user1 として接続し、SQL Server ユーザーへのマッピングを作成します。

   ```
   test=> CREATE USER MAPPING FOR user1 SERVER sqlserverdb OPTIONS (username 'sqlserveruser', password 'password');
   CREATE USER MAPPING
   ```

1. SQL Server テーブルにリンクされた外部テーブルを作成します。

   ```
   test=> CREATE FOREIGN TABLE mytab (a int) SERVER sqlserverdb OPTIONS (table 'MYTABLE');
   CREATE FOREIGN TABLE
   ```

1. 外部テーブルに対しクエリを実行します。

   ```
   test=> SELECT * FROM mytab;
    a
   ---
    1
   (1 row)
   ```

### 接続に転送中の暗号化を使用する
<a name="postgresql-tds-fdw-ssl-tls-encryption"></a>

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 を使用させる](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.SSL.Using.html#SQLServer.Concepts.General.SSL.Forcing)」を参照してください。RDS for SQL Server での SSL/TLS 設定の詳細については、「[Microsoft SQL Server DB インスタンスでの SSL の使用](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.SSL.Using.html)」を参照してください。