Я портирую код из какой-то версии Sybase на PostgreSQL. Это приложение C, которое использует клиентскую библиотеку Sybase. Мой подход заключается в написании перевода слоя , который переводит вызовы dbsqlexec()
в PQexec()
(например). Эта часть в основном работает.
Похоже, что база данных Sybase настроена с учетом регистра (в отношении имен объектов базы данных). Например, есть и WIDGET
таблица, и widget
таблица. Похоже, что соглашение в этом приложении заключается в том, что имена в верхнем регистре указывают на действительные таблицы данных, а имена в нижнем регистре используются в качестве временных таблиц при выполнении некоторой обработки.
Согласно лексической структуре 4.1 « Ключевые слова и идентификаторы без кавычек не чувствительны к регистру». Я знаю, что могу использовать двойные кавычки для идентификаторов, чтобы отключить автоматическое свертывание в нижний регистр, но я не хочу делать это вручную через миллионы строк кода, который использует эту базу данных.
Есть ли способ настроить PostgreSQL, чтобы отключить это автоматическое сворачивание регистра для идентификаторов объектов базы данных?
Моя альтернатива - написать код, который проверяет каждое выражение SQL и помещает двойные кавычки вокруг каждого идентификатора (это не ключевое слово).
источник
select * from TaBlEnAmE
будет ссылаться на ту же таблицу, чтоselect * from tablename
иselect * from TABLENAME
create table "tableName" (id integer primary key);
, а затем,create table "tablename" (id integer primary key);
то этот запросselect * from TaBlEnAmE;
будет выбираться из «tablename», а не из «tableName». «Имена без кавычек всегда складываются в нижний регистр» .Ответы:
Я закончил тем, что написал некоторый код, преобразующий SQL, сгенерированный приложением, в PostgreSQL-совместимый SQL. Это довольно просто:
Я также воспользовался этим уровнем для преобразования вызовов
isnull
вcoalesce
. Пока это работает довольно хорошо.источник
Не напрямую. Вы можете внести относительно небольшие изменения в исходный код PostgreSQL и перекомпилировать его. (Начните с src / backend / parser / parser.c?) Но я был бы удивлен, если бы это было очень просто.
источник