Использование Postgresql Bablefish для подключения приложения Sybase к Aurora Postgresql

У меня есть большое приложение Sybase ASE C/C++, которое я хотел бы перенести на Postgresql. Приложение использует библиотеку Sybase CT (ничего сложного: простой SQL, несколько массовых загрузок и т. Д.). Приложение создано и запускается в Linux с использованием SYBASE OCS-16.

Я пытаюсь оценить, может ли расширение 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, который предоставляет тот же API, что и Sybase, и настроить его для использования TDS 7.X, который поддерживается Babelfish.

В основном:(Мое приложение) -> (звонки CT) -> (freeTDS) -> TDS 7.X -> (Babelfish) -> (Postgresql).

Мои вопросы:

  • Кто-нибудь пробовал этот подход для Sybsae->Postgresql.
  • Вероятно, этот подход сработает?
  • Нужен ли freeTDS? Будет ли bablefish разговаривать с клиентом, говорящим на TDS 5.X (или 4.X) в порту babelfish?
  • Есть ли лучший подход к решению этой проблемы?

В этом проекте можно внести незначительные изменения в приложение (и, если необходимо, в freeTDS), но невозможно затронуть весь код, который выдает вызовы CT - слишком много модулей - слишком много времени - практически не вариант.

1 ответ

Решение

Исходя из Sybase и написав книгу по ASE ... это правда, что ASE T-SQL и MSSQL T-SQL все еще имеют много общего, так что с этой точки зрения все может работать. Однако есть также много неприятных мелких различий. Чтобы назвать только несколько случайных аспектов: пустая строка (один пробел в ASE, действительно пустой в MSSQL), конкатенация строк с NULL (MSSQL отошел от того, что по-прежнему является значением по умолчанию Sybase), синтаксис T-SQL OJ (нет больше не поддерживается в MSSQL и не поддерживается в Babelfish); различное поведение некоторых BIF в некоторых случаях (SUBSTRING(), SPACE()), BIF, которых нет в SQL Server, другой синтаксис для RAISERROR и PRINT, CREATE TYPE / sp_addtype, различия, @@FETCH_STATUS, другой синтаксис для подсказок, ROLLBACK TRIGGER , расширенный синтаксис GROUP-BY. И еще есть такие вещи, как параметры CREATE DATABASE/ALTER DATABASE, QUIESCE DATABASE,репликация, разное разделение. Что касается подключения: FreeTDS может работать, но с точки зрения Babelfish это фактически не поддерживается. Подводя итог: ваш пробег может отличаться. Как синтаксически, так и семантически будут различия, которые могут повлиять на вашу миграцию, поэтому, хотя некоторые части могут работать, вам может потребоваться исправить свой код ASE SQL, прежде чем Babelfish его примет.

Другие вопросы по тегам