

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 与 Aurora PostgreSQL 兼容的异构数据库集成
<a name="heterogeneous-databases"></a>

要将兼容 Aurora PostgreSQL 与远程 SQL Server 数据库集成，请使用表格数据流外部数据包装器 () 扩展。`tds_fdw`通过使用该`tds_fdw`扩展，您可以实现联合查询功能，以便与任何基于 SQL Server 的远程数据库进行交互，包括本地数据库以及在 [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) 上托管或自行管理的数据库。该`tds_fdw`扩展适用于所有当前支持的亚马逊 RDS for PostgreSQL 版本以及兼容 Aurora PostgreSQL 的版本。

## tds\_fdw 用例和高级步骤
<a name="tds-fdw"></a>

将兼容 Aurora PostgreSQL 的 Aurora 与 SQL Server 等异构数据库集成支持以下用例：
+ **混合架构**-您的组织可能拥有现有的 SQL Server 数据库，这些数据库必须共存并与兼容 Aurora PostgreSQL 的兼容性集成。在这种情况下，与 Aurora PostgreSQL 兼容可以成为混合架构的一部分，在该架构中，它与异构数据库交互以交换数据或执行特定操作。通过这种集成，您的组织可以在保持现有投资的同时，利用不同数据库平台的优势。
+ **报告和分析**-您可以使用兼容 Aurora PostgreSQL 的数据库作为报告或分析数据库。您可以整合来自多个来源的数据，包括 Oracle 和 SQL Server 数据库。在组织想要创建针对特定业务部门或用例量身定制的专业报告数据库或数据集市的场景中，这种用例很常见。

要在兼容 Aurora PostgreSQL 的情况下配置`tds_fwd`扩展，请使用以下高级步骤：

1. 使用 PostgreSQL 客户端连接到与 Aurora PostgreSQL 兼容的集群，然后创建扩展模块：`tds_fdw`

   ```
   CREATE EXTENSION tds_fdw;
   ```

   此扩展提供了访问和查询来自远程 SQL Server 数据库的数据的功能，就像这些数据库是本地表一样。

1. 创建一个服务器对象，该对象表示要连接的远程 SQL Server 或 TDS 兼容数据库。

1. 确保必要的安全组和网络配置到位，以允许兼容 Aurora PostgreSQL 的服务器连接到远程 SQL Server 数据库。

   如果远程数据库托管在本地，则可能需要配置 VPN 或 AWS Direct Connect 连接。

   运行如下命令：

   ```
   CREATE SERVER my_remote_sql_server
       FOREIGN DATA WRAPPER tds_fdw
       OPTIONS (
           servername 'your_server_name',
           port '1433',
           instance 'your_instance_name'
       );
   ```

1. 定义一个用户映射，将兼容 Aurora PostgreSQL 的用户映射到远程 SQL Server 或兼容 TDS 的数据库上的用户：

   ```
   CREATE USER MAPPING FOR postgres
       SERVER my_remote_sql_server
       OPTIONS (
           username 'your_sql_server_username',
           password 'your_sql_server_password'
       );
   ```

1. 创建一个表示远程 SQL Server 或 TDS 兼容数据库中的表或视图的外部表：

   ```
   CREATE FOREIGN TABLE sql_server_table (
       column1 INTEGER,
       column2 VARCHAR(50)
   ) SERVER my_remote_sql_server
       OPTIONS (
           schema_name 'your_schema_name',
           table_name 'your_table_name'
       );
   ```

1. 基于 SQL 查询创建外部表：

   ```
   CREATE FOREIGN TABLE mssql_people ( empno INT NOT NULL , ename VARCHAR(10) NULL, dept INT) SERVER my_remote_sql_server OPTIONS (  query 'SELECT empno, ename, dept FROM dbo.emp');
   ```

1. 像查询兼容 Aurora PostgreSQL 中的任何其他表一样查询外部表：

   ```
   SELECT * FROM sql_server_table; 
   SELECT * FROM mssql_people; -- Query based on table
   ```

1. 将表从 SQL Server 导入到 PostgreSQL：

   ```
   IMPORT FOREIGN SCHEMA dbo LIMIT TO (emp) FROM SERVER
                           my_remote_sql_server INTO public_fdw;
   ```

1. 要验证查询计划，请运行`EXPLAIN SELECT`：

   ```
   EXPLAIN SELECT * FROM mssql_people;
   ```

**注意**  
数据操作语言 (DML) 操作无法通过`tds_fdw`扩展实现。系统不支持跨不同的数据库引擎执行 DML 操作。 `INSERT`、`DELETE`、`UPDATE`、和在远程 SQL 服务器上`TRUNCATE TABLE`将无法成功。