このトピックでは、Babelfish for ApsaraDB RDS for PostgreSQLインスタンスの機能、アーキテクチャ、シナリオ、および使用上の注意事項について説明します。
定義
ApsaraDB RDS for PostgreSQLは、Babelfish for PostgreSQLオープンソースプロジェクトに基づいて開発されたBabelfish機能を提供します。 PostgreSQLインスタンス用のApsaraDB RDSを作成するときに、Babelfishを有効にできます。 Babelfishを有効にすると、RDSインスタンスはMicrosoft SQL ServerデータベースとPostgreSQLデータベースの両方からデータを照会および処理できます。 これにより、RDSインスタンスはTransact-SQL (T-SQL) ステートメントを解析して実行できます。
Babelfishは、テーブルデータストリーム (TDS) 、SQL Serverワイヤプロトコル、およびT-SQL、Microsoft SQL Serverクエリ言語をサポートしています。 数行のコードを変更するだけで、アプリケーションのデータベースをSQL ServerインスタンスからBabelfishが有効になっているRDSインスタンスに移行できます。 データベースドライバーの切り替えやSQL文の書き換えは必要ありません。
シナリオ
- SQL Serverのライセンスコストを削減したい場合。
- SQL ServerデータベースをPostgreSQLデータベースに移行する場合。 ただし、アプリケーションコードの変更に長い時間や労力を費やす必要はありません。
- PostgreSQLのオープンソースのプラグインライブラリを使用します。たとえば、時空間データ分析にはPostGISプラグイン、時系列データ分析にはTimescaleDBプラグインを使用します。
- PostgreSQLデータベースとSQL Serverデータベースの両方からデータを処理するために、単一のRDSインスタンスを使用してコストを削減したいとします。
アーキテクチャ

- Babelfishが有効になっているRDSインスタンスは、次のリスナーを使用して、TCPポートを介したSQL ServerクライアントおよびPostgreSQLクライアントからのリクエストを監視します。
- TDSリスナー: SQL ServerのTDSポートを介してリクエストを受信します。 デフォルトのポート番号は 1433 です。
説明 バベルフィッシュはTDS 7.1以降をサポートしています。 Microsoft SQL Server 2000以降のバージョンがサポートされています。
- PostgreSQLリスナー: PostgreSQLのポートを介してリクエストを受信します。 既定のポート番号は 5432 です。
説明 PostgreSQL 13または14を実行するRDSインスタンスがサポートされています。
- TDSリスナー: SQL ServerのTDSポートを介してリクエストを受信します。 デフォルトのポート番号は 1433 です。
- Babelfishが有効になっているRDSインスタンスがTDSリスナーからリクエストを受信すると、RDSインスタンスはそのリクエストをT-SQLパーサーに転送します。 次に、T-SQLパーサーは、SQL ServerのT-SQLステートメントをPostgreSQLで処理できる実行プランに変換します。
- Babelfishが有効になっているRDSインスタンスがPostgreSQLリスナーからリクエストを受信すると、RDSインスタンスはリクエストをPostgreSQLパーサーに転送して実行プランを生成します。
- PostgreSQLのSQLエグゼキュータは、すべてのプランを処理して実行します。
RDSインスタンスに対してBabelfishを有効にすると、RDSインスタンスにPostgreSQLデータベースエンジンとSQL Serverデータベースエンジンの両方の機能が組み込まれます。 RDSインスタンスは、SQL ServerクライアントおよびPostgreSQLクライアントからのリクエストを処理できます。 これは、コストの削減と処理能力の向上に役立ちます。
移行モード
babelfishが有効になっているRDSインスタンスに対して、babelfish_db
という名前のPostgreSQLデータベースがプロビジョニングされます。 移行されたすべてのSQL Serverオブジェクトとスキーマは、このPostgreSQLデータベースに格納されます。
babelfish_db
データベースは表示されません。
Single-DBモードまたはMulti-DBモードを使用できます。 使用するモードは、SQL Serverデータベースのスキーマ名とbabelfish_db
データベースのスキーマ名に影響します。
シングルDBモード
- アーキテクチャ
- 説明: このモードでは、babelfish_dbデータベースのユーザーデータベースのスキーマ名は、SQL Serverデータベースのスキーマ名と同じです。
たとえば、TDSポートでDB_Aという名前のデータベースを作成し、DB_Aデータベースにschema_Aという名前のスキーマを作成します。
- dboとschema_Aという名前のスキーマは、PostgreSQLのbabelfish_dbデータベースにあります。
- dboおよびschema_Aという名前のスキーマは、SQL ServerのDB_Aデータベースに存在します。
マルチDBモード
- アーキテクチャ
- 説明: このモードでは、PostgreSQLのユーザーデータベースのスキーマ名は、
dbname_schemaname
の形式で指定されます。 SQL Serverでは、スキーマ名は変更されません。たとえば、TDSポートでDB_Aという名前のデータベースを作成し、DB_Aデータベースにschema_Aという名前のスキーマを作成します。- DB_A_dboおよびDB_A_schema_Aという名前のスキーマは、PostgreSQLのbabelfish_dbデータベースにあります。
- dboおよびschema_Aという名前のスキーマは、SQL ServerのDB_Aデータベースに存在します。
料金
Babelfishが有効になっているRDSインスタンスの料金は、通常のRDSインスタンスの料金と同じです。 追加料金はかかりません。 料金は、リージョン、インスタンスタイプ、ストレージタイプなどのインスタンス設定によって異なります。 詳細については、ApsaraDB RDS購入ページをご参照ください。
使用上の注意
- RDSインスタンスのBabelfishを有効にするには、インスタンスを作成した場合のみ有効にします。 RDSインスタンスを作成するには、次のパラメーター設定を使用する必要があります。
- データベースエンジン: PostgreSQL 13または14。
- インスタンスタイプ: 新しい汎用インスタンスタイプ。 詳細については、「新しい汎用インスタンスタイプのプライマリRDSインスタンス」をご参照ください。
- PostgreSQL 13または14を実行し、新しい汎用インスタンスタイプを使用する既存のRDSインスタンスでは、Babelfishを有効にすることはできません。
- Babelfishを有効にすると、無効にすることはできません。