繁体   English   中英

使用 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 迁移)是应用程序广泛使用多语句查询来返回多结果集,使用动态生成的 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 CT API。 我相信最好的方法是使用 openTDS,它提供与 Sybase 相同的 API,并将其配置为使用 Babelfish 支持的 TDS 7.X。

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

我的问题:

  • 有没有人为 Sybsae->Postgresql 尝试过这种方法。
  • 这种方法可行吗?
  • 需要freeTDS吗? bablefish 会与在 babelfish 端口上使用 TDS 5.X(或 4.X)的客户端通话吗?
  • 有没有更好的方法来解决这个问题?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM