У меня очень странная проблема с H2.
В дополнение ко всем таблицам, находящимся в схеме по умолчанию ("PUBLIC"), у меня есть несколько таблиц, созданных в отдельной схеме (есть веская бизнес-причина сделать это таким образом, но это здесь неактуально). Когда я бегу
select * from schema1.table1
все работает отлично. Если я попытаюсь сделать то же самое, но упомяну имена столбцов явно, например,
select col1, col2 from schema1.table1
запрос не выполнен с ошибкой «Столбец col1 не найден; 42S22 / 42122». Это происходит всякий раз, когда на столбец ссылаются где-либо в select (из предложения / where в положение / etc ...).
Имена столбцов верны и отображаются в INFORMATION_SCHEMA
. Кроме того, если я цитирую их, запрос работает должным образом - однако это имеет побочный эффект, заключающийся в том, что имена столбцов чувствительны к регистру, что приводит к сбою в Hibernate, который, очевидно, в любом случае заглавными буквами.
Я пропускаю что-то очевидное здесь? Есть ли причина для этого странного поведения или это ошибка?
Обновление : ответ Томаса заставил меня понять, что проблема была не в другой схеме, а в том, как создавались таблицы в этой схеме; в частности, использование цитируемых идентификаторов. Вот скрипт, который воспроизводит проблему в H2 1.3.161 (последняя версия atm):
create table table1(col1 int, "col2" int);
insert into table1 values(1, 1);
select * from table1; -- works
select col1 from table1; -- works
select "col2" from table1; -- works
select col2 from table1; -- fails
Я не понимаю, почему есть разница между двумя последними запросами. Имя столбца здесь чувствительно к регистру (потому что оно было определено с помощью идентификатора в кавычках), но оно имеет правильный регистр. INFORMATION_SCHEMA
. COLUMNS
также не показывает различий (кроме имени) между двумя столбцами. Получается ли нечувствительность к регистру для столбцов без кавычек путем принудительного ввода всех запросов в верхнем регистре?
Вышеуказанный скрипт работает должным образом (как и во всех успешных запросах) в Postgres.