Babelfish简介

当您希望在单一的数据库实例中同时使用SQL Server和PostgreSQL能力,或计划将现有应用从SQL Server迁移到更具成本效益的PostgreSQL时,Babelfish for RDS PostgreSQL实现了对T-SQL语句和TDS协议的支持。本文从产品特性、架构、适用场景以及使用方法等维度介绍Babelfish for RDS PostgreSQL实例,帮助您快速了解并上手使用。

Babelfish是什么

基于Babelfish for PostgreSQL的开源项目,阿里云RDS PostgreSQL实例购买时开启Babelfish选项后,可以同时获得Microsoft SQL Server和PostgreSQL两种数据库引擎数据查询和处理的能力,从而使RDS PostgreSQL具备解析执行SQL Server T-SQL语句的能力。

Babelfish支持SQL Server Tabular Data Stream (TDS) wire protocolT-SQL(Microsoft SQL Server 查询语言),因此您无需切换数据库驱动程序或重新编写SQL,只需要在适配少量代码的情况下,将应用程序的数据库从SQL Server迁移至开启了Babelfish的阿里云RDS PostgreSQL实例上。

支持的T-SQL内置函数请参见Babelfish支持的T-SQL内置函数

适用场景

  • 如果您期望节省SQL Server的License费用支出。

  • 如果您计划将SQL Server数据库切换为PostgreSQL,又不希望投入大量的时间和精力重写应用程序。

  • 如果您期望使用PostgreSQL强大的开源插件库能力,例如时空定位插件PostGIS,时序插件TimescaleDB等。

  • 如果您期望一份成本享受两种数据库引擎的数据处理能力。

Babelfish for RDS PostgreSQL架构图

image

架构说明:

  • Babelfish for RDS PostgreSQL实例具备两个TCP端口,分别监听来自SQL Server和PostgreSQL客户端的SQL请求。

    • TDS Listener:接收SQL Server协议端口(TDS)的SQL请求,默认端口号为1433。

      说明

      Babelfish支持TDS协议7.1及更高版本,即支持Microsoft SQL Server 2000及以上版本。

    • PostgreSQL Listener:接收PostgreSQL协议端口的SQL请求,默认端口号为5432。

      说明

      当前支持RDS PostgreSQL 15。

  • Babelfish for RDS PostgreSQL实例接收来自TDS Listener端口的SQL请求时,该请求被转发到T-SQL解析器,将SQL Server的T-SQL转换为PostgreSQL可识别的执行计划。

  • Babelfish for RDS PostgreSQL实例接收来自PostgreSQL Listener端口的SQL请求时,该请求被转发到PostgreSQL解析器,生成执行计划。

  • PostgreSQL内部的SQL执行器统一处理,执行所有计划。

开启了Babelfish功能的RDS PostgreSQL实例,使您同时具备了两个数据库引擎(PostgreSQL和SQL Server)的能力,既可以处理来自SQL Server的请求,又可以处理来自PostgreSQL的请求,在降低成本的同时获得更多的能力支持。

迁移模式简介

Babelfish for RDS PostgreSQL实例会预置一个名为babelfish_db的PostgreSQL数据库,所有迁移的SQL Server对象和结构都会放置在该数据库下。

说明

如果您通过TDS端口连接实例,babelfish_db数据库不可见。

您可以选择Single-DB模式(单数据库模式)或Multi-DB模式(多数据库模式)。不同模式下,babelfish_db内的SQL Server数据库模式及名称不同。

Single-DB模式

  • 架构图single-db

  • 说明:该模式下,babelfish_db数据库中用户数据库的Schema名称与SQL Server中的相同。

    例如:通过TDS端口创建数据库DB_A,然后在DB_A下创建schema_A。

    • 在PostgreSQL的babelfish_db数据库中,Schema名称为:dbo和schema_A。

    • 在SQL Server的DB_A数据库中,Schema名称为:dbo和schema_A。

Multi-DB模式

  • 架构图Multi-DB

  • 说明:该模式下,在PostgreSQL中,用户数据库的schema名称为dbname_schemaname。在SQL Server中,Schema名称保持不变。

    例如:通过TDS端口创建数据库DB_A,然后在DB_A下创建schema_A。

    • 在PostgreSQL的babelfish_db数据库中,Schema名称为:DB_A_dbo和DB_A_schema_A。

    • 在SQL Server的DB_A数据库中,Schema名称为:dbo和schema_A。

计费

Babelfish for RDS PostgreSQL实例与通用RDS PostgreSQL实例售价相同,不会收取任何额外费用,价格与所选地域、规格、存储等配置相关,请前往购买页面查看。

注意事项

重要

Babelfish for RDS PostgreSQL功能当前白名单开放中,如需使用,请联系我们

  • 当前仅支持在购买实例时开通Babelfish,且实例需满足以下条件:

    说明

    暂不支持集群系列实例。

    • 实例大版本:RDS PostgreSQL 15。

    • 实例产品类型为标准版。

  • 已购买的RDS PostgreSQL实例,暂不支持开通Babelfish。

  • 开通Babelfish后,暂不支持关闭。

  • 实例创建成功后,将会初始化创建babelfish_db数据库,该数据库为Babelfish实例的关键数据库,请勿删除,否则实例将不可用。

使用方法