当您希望在单一的数据库实例中同时使用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 protocol和T-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架构图
架构说明:
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模式
架构图:
说明:该模式下,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模式
架构图:
说明:该模式下,在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实例的关键数据库,请勿删除,否则实例将不可用。