Я портирую код из какой-то версии 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». «Имена без кавычек всегда складываются в нижний регистр» .