Babelfish for PostgreSQL 是一个开源项目,可在 Apache 2.0 和 PostgreSQL 许可下使用。它使 PostgreSQL 能够理解来自 Microsoft SQL Server 编写的应用程序的查询。Babelfish 了解 SQL Server 有线协议和 Microsoft SQL Server 查询语言 T-SQL,因此您不必切换数据库驱动程序或重新编写所有应用程序查询。借助 Babelfish,当前在 SQL Server 上运行的应用程序现在可以直接在 PostgreSQL 上运行,只需更改更少的代码。
Babelfish for PostgreSQL(Babelfish)
是一个工具,让 PostgreSQL
能够理解为Microsoft SQL Server
编写的应用程序的查询。Babelfish
是一组扩展,作为对PostgreSQL
的增强,提供了 T-SQL
功能和一个 Tabular Data Stream(TDS)
监听端口。它支持 SQL Server
的 T-SQL
,以及包括保存点、存储过程、嵌套事务等在内的显著功能。
Babelfish
采用开源的 Apache 2.0
和 PostgreSQL
许可证,并构建在现有的PostgreSQL
之上。这种许可证允许您自由使用、修改、分发和销售包含Apache 2.0
或 PostgreSQL
许可证软件的产品。
Babelfish for PostgreSQL 的组成
Babelfish for PostgreSQL
的组成包括以下几个主要部分:
1) Babelfish 核心补丁(Core Patch)
这是针对社区版 PostgreSQL
的补丁,通过对 PostgreSQL
进行修改,使其能够理解 SQL Server
的 T-SQL
语言和传输协议。这个核心补丁将被提交以纳入未来版本的 PostgreSQL
中。
2) Babelfish 扩展(Extensions)
构建在核心补丁之上的扩展,为 PostgreSQL
增加了 T-SQL
功能和 Tabular Data Stream(TDS)
监听端口。这些扩展是 Babelfish
的关键组成部分,使得 PostgreSQL
能够更好地处理 SQL Server
应用程序的查询和语法。
3) Babelfish Compass 工具
这是一个评估工具,用于分析 Microsoft SQL Server
的 SQL/DDL
代码,确定Babelfish
的支持水平,并生成一份报告。该报告可帮助用户在从 SQL Server
迁移到 PostgreSQL
的过程中做出决策,提供了对 Babelfish
支持的清晰了解。
这些组成部分协同工作,使得 PostgreSQL
能够更好地与 SQL Server
应用程序进行交互,加速了从 SQL Server
到 PostgreSQL
的迁移过程。这一体系结构的开放性和可扩展性使得用户能够更轻松地进行数据库迁移,并在需要时扩展功能。
Babelfish 的优势
Babelfish
通过使 SQL Server
应用程序更轻松地迁移到 PostgreSQL
,帮助消除昂贵的许可费用。使用Babelfish,最初为 SQL Server
构建的应用程序可以直接在 PostgreSQL
上运行,而只需进行较少的代码更改,无需更改数据库驱动程序。
工作原理
SQL
SQL
:虽然 SQL
是一种 ANSI
标准,关系数据库因实现规范的支持程度不同以及具有特定的语言扩展而而出名。因此,在 SQL Server
中有效的查询可能不能直接在 PostgreSQL
中运行。为解决这个问题,Babelfish
有自己的解析器,创建适当的查询节点,使得 SQL Server
代码能够在 PostgreSQL
中本地执行。Babelfish
还为 SQL Server
提供了特定的数据类型、函数和运算符,这些在 PostgreSQL
中不存在或在 SQL Server
和 PostgreSQL
中的工作方式不同。
T-SQL
T-SQL
:T-SQL
是 SQL Server
的语言,包括 SQL
标准的扩展。具体而言,T-SQL
包括用于存储过程的构造,如变量、异常、控制流等。Babelfish
将对这些构造的支持添加到 PostgreSQL
中。Babelfish
还支持 T-SQL
语义。例如,在传统的 PostgreSQL
中,某些错误会导致回滚,而在 SQL Server
中不会。通过 TDS
端口使用时,Babelfish
确保 PostgreSQL
遵循 SQL Server
的行为,确保正确性。
TDS
TDS
(SQL Server
的传输协议):Babelfish
还为 SQL Server
的传输协议TDS
添加了支持,该协议默认在端口 1433
上运行。这意味着 Babelfish
使用相同的网络协议、端口和连接驱动程序。这是通过协议挂钩本地实现的,因此它不是一个翻译层。
由于无需更换数据库驱动程序,并且更新 SQL
语言代码的工作量大大减少,使用 Babelfish
从 SQL Server
迁移到 PostgreSQL
的应用程序将比完全迁移到本地 PostgreSQL
驱动程序和 PL/pgSQL
更快地启动和运行。由于Babelfish
是开源的,社区可以在识别迁移中的差距时扩展功能,增强PostgreSQL
的可扩展性,并针对更多用例进行优化。
转载声明: