使用 Postgresql Bablefish 将 Sybase 应用程序连接到 Aurora Postgresql

Using Postgresql Bablefish to connect Sybase app to Aurora Postgresql

我有一个大型 Sybase ASE C/C++ 应用程序,我想将其迁移到 Postgresql。该应用程序正在使用 Sybase CT 库(没有什么复杂的:简单 SQL、少量批量上传等)。使用 SYBASE OCS-16 在 Linux 上构建并 运行 应用程序。

我正在尝试评估 BabelFish 扩展是否有助于加快迁移速度。

第一个挑战(从 Sybsae 迁移而来)是应用程序广泛使用多语句查询 return 多结果集,使用动态生成的 Transact-SQL。在少数情况下,多语句查询在后续调用中使用占位符。例如:(这不是真正的代码,但它类似于模式)

declare @a int
select @a = ?
select foo,  bar from table1 where key = @a
select x, y from table2 where key = @a and date = ?
...

快速检查表明 Microsoft T-SQL.

支持所有这些结构

第二个挑战是Sybase CTAPI。我认为最好的方法是使用 openTDS,它提供与 Sybase 相同的 API,并将其配置为使用 Babelfish 支持的 TDS 7.X。

基本上: (我的应用程序) -> (进行 CT 调用) -> (freeTDS) -> TDS 7.X -> (Babelfish) -> (Postgresql).

我的问题:

在这个项目中,可以对应用程序进行微小的更改(如果需要,还可以对 freeTDS 进行更改),但不可能触及发出 CT 调用的所有代码 - 模块太多 - 太耗时 - 实际上不是选项。

来自 Sybase,并且写了关于 ASE 的书...ASE T-SQL 和 MSSQL T-SQL 确实有很多相似之处,所以从这个角度来看,事情可能会奏效。然而,也有许多讨厌的小差异。随便举几个方面:空字符串(ASE 中的单个 space,MSSQL 中真的是空的),与 NULL 的字符串连接(MSSQL 已经远离了仍然是 Sybase 默认值),T-SQL OJ 语法(MSSQL 不再支持,Babelfish 也不支持);某些 BIF 在某些情况下的不同行为(SUBSTRING()、SPACE())、SQL 服务器没有的 BIF、RAISERROR 和 PRINT 的不同语法、CREATE TYPE/sp_addtype 差异、@ @FETCH_STATUS,不同的提示语法,ROLLBACK TRIGGER,扩展的 GROUP-BY 语法。然后是 CREATE DATABASE/ALTER DATABASE 选项、QUIESCE DATABASE、复制、分区等不同的东西。 至于连接性:FreeTDS 可能有效,但从 Babelfish 的角度来看,这实际上不受支持。 总之:您的里程可能会有所不同。句法和语义上的差异可能会影响您的迁移,因此虽然某些部分可能有效,但您可能需要在 Babelfish 接受它之前修补您的 ASE SQL 代码。