使用 Aurora PostgreSQL 的 Babelfish
Aurora PostgreSQL 的 Babelfish 扩展了您的 Amazon Aurora PostgreSQL 兼容版数据库,能够接受来自 Microsoft SQL Server 客户端的数据库连接。这样做可以让最初为 SQL Server 构建的应用程序可以直接与 Aurora PostgreSQL 协作,与传统迁移相比,代码更改很少,而且无需更改数据库驱动程序。有关迁移的更多信息,请参阅 使用 Babelfish 迁移到 PostgreSQL。
Babelfish 为 Aurora PostgreSQL 数据库集群提供了一个额外的端点,使其能够了解 SQL Server 线路级协议和常用的 SQL Server 语句。这种方法允许使用表格式数据流 (TDS) 线路协议的客户端应用程序本地连接到 Aurora PostgreSQL 上的 TDS 侦听器端口。Babelfish 支持 TDS 7.1 及更高版本。有关 SQL Server 线路级协议的更多信息,请参阅 Microsoft 网站上的 [MS-TDS]:表格式数据流协议
您可以使用来自一个应用程序的 Babelfish TDS 连接和另一个应用程序的原生 PostgreSQL 连接同时访问数据。您可以在创建集群时或稍后在 Aurora PostgreSQL 参数组中自定义用于每个客户端连接的端口。有关控制 Babelfish 的参数的更多信息,请参阅 为 Babelfish 配置数据库。
预设情况下,要使用以下方言,请使用以下端口:
-
SQL Server 方言,客户端连接到端口 1433。
-
PostgreSQL 方言,客户端连接到端口 5432。
Babelfish 运行 Transact-SQL (T-SQL) 语言,但 带有 Babelfish 的 Aurora PostgreSQL 与 SQL Server 之间的区别 中记录的例外情况如下。
在下文中,您可以了解有关如何使用 Babelfish 的信息。
主题
- Babelfish 架构
- 使用 Babelfish 迁移到 PostgreSQL
- 使用 Babelfish 创建 Aurora PostgreSQL 集群
- 在打开 Babelfish 的情况下连接到数据库集群
- 查询数据库以获取对象信息
- 查询 Babelfish 以查找 Babelfish 的详细信息
- 带有 Babelfish 的 Aurora PostgreSQL 与 SQL Server 之间的区别
- 将 Aurora PostgreSQL 扩展与 Babelfish 搭配使用
- 管理 Babelfish 错误处理
- 为 Babelfish 配置数据库
- Babelfish 排序规则支持
- Babelfish 问题排查
- 关闭 Babelfish
- Babelfish 版本
Babelfish 架构
当您在打开 Babelfish 的情况下创建 Aurora PostgreSQL 集群时,Aurora 会为该集群预置名为 babelfish_db 的 PostgreSQL 数据库。此数据库是所有迁移的 SQL Server 对象和结构所在的位置。
在 Aurora PostgreSQL 集群中,系统会为 Babelfish 预留 babelfish_db 数据库名称。在 Babelfish for Aurora PostgreSQL 上自行创建名为 babelfish_db 的数据库会阻止 Aurora 成功预置 Babelfish。
当您连接到 TDS 端口时,会话将被放置在 babelfish_db 数据库中。从 T-SQL 来看,该结构看起来类似于连接到 SQL Server 实例。您可以看到 master 和 tempdb 数据库以及 sys.databases 目录。您可以创建其他用户数据库并使用 USE 语句在数据库之间切换。当您创建 SQL Server 用户数据库时,该数据库将被展平到 babelfish_db PostgreSQL 数据库中。数据库保留的跨数据库语法和语义等于或类似于 SQL Server 提供的语法和语义。
将 Babelfish 与单个数据库或多个数据库结合使用
当您创建 Aurora PostgreSQL 集群以与 Babelfish 一起使用时,您可以选择单独使用单个 SQL Server 数据库或者将多个 SQL Server 数据库一起使用。您的选择会影响 babelfish_db 数据库内的 SQL Server 架构的名称显示在 Aurora PostgreSQL 中的方式。迁移模式存储在 migration_mode 参数中。创建集群后,您无法更改此参数。
在单数据库模式下,babelfish_db 数据库中的用户数据库的模式名称与 SQL Server 中的数据库保持一致。如果选择移动单个数据库,架构将在数据库内重新创建,并且可以引用与 SQL Server 使用的名称相同的名称。例如,dbo 和 smith 架构驻留在 dbA 数据库内。
通过 TDS 进行连接时,您可以运行 USE dbA 以查看来自 T-SQL 的架构 dbo 和 smith,就像在 SQL Server 中一样。不变的架构名称也可以从 PostgreSQL 中看到。
在多数据库模式下,当从 PostgreSQL 中查看时,用户数据库的架构名称变为 dbname_schemaname。从 T-SQL 中看到架构名称保持不变。
通过 TDS 进行连接时,您可以运行 USE dbA,以查看来自 T-SQL 的架构 dbo 和 smith,就像在 SQL Server 中一样。映射的架构名称,例如 dbA_dbo 和 dbA_smith,在 PostgreSQL 中可见。
每个数据库仍包含您的架构。每个数据库的名称都加在 SQL Server 架构的名称之前,使用下划线作为分隔符,例如:
-
dbA包含dbA_dbo和dbA_smith。 -
dbB包含dbB_dbo和dbB_jones。 -
dbC包含dbC_dbo和dbC_miller。
在 babelfish_db 数据库内,T-SQL 用户仍然需要运行 USE
dbname 以更改数据库上下文,因此外观和感觉与 SQL Server 相似。
选择迁移模式
每种迁移模式都有优点和缺点。根据您拥有的用户数据库数量和迁移计划选择迁移模式。创建用于 Babelfish 的集群后,您将无法更改迁移模式。选择迁移模式时,请考虑用户数据库和客户端的要求。
当您创建用于 Babelfish 的集群时,Aurora PostgreSQL 会创建系统数据库 master 和 tempdb。如果您在系统数据库中创建或修改了对象(master 或 tempdb),请确保在新集群中重新创建这些对象。与 SQL Server 不同,Babelfish 不会在集群重启后重新初始化 tempdb。
在以下情况下使用单个数据库迁移模式:
-
如果您要迁移单个 SQL Server 数据库。在单个数据库模式下,迁移的架构名称与原始的 SQL Server 架构名称相同。迁移应用程序时,对 SQL 代码进行的更改会减少。
-
如果您的最终目标是完全迁移到原生 Aurora PostgreSQL。在迁移之前,将您的架构整合到单个架构中 (
dbo),然后迁移到单个集群中以减少所需的更改。
在以下情况下使用多数据库迁移模式:
-
如果您正在试用 Babelfish 且不确定自己未来的需求。
-
如果需要一起迁移多个用户数据库,并且最终目标不是执行完全原生的 PostgreSQL 迁移。
-
如果您将来可能要迁移多个数据库。