Использование 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 его примет.