Являются ли имена столбцов PostgreSQL чувствительными к регистру?


у меня есть таблица БД, скажем, persons в Postgres, переданном другой командой, у которой есть имя столбца, говорят:"first_Name". Теперь я пытаюсь использовать PG commander для запроса этой таблицы на это имя столбца.

select * from persons where first_Name="xyz";

и он просто возвращает

ошибка: столбец "first_Name" не существует

не уверен, если я делаю что-то глупое или есть обходной путь к этой проблеме, что я не хватает?

3 95

3 ответа:

все идентификаторы (включая имена столбцов), которые не заключены в двойные кавычки, складываются в нижний регистр в PostgreSQL. Имена столбцов, которые были созданы с двойными кавычками и тем самым сохранили заглавные буквы (и/или другие нарушения синтаксиса), должны быть дважды заключены в кавычки на всю оставшуюся жизнь. Итак,Да, имена столбцов PostgreSQL чувствительны к регистру:

SELECT * FROM persons WHERE "first_Name" = 'xyz';

также исправить неправильные двойные кавычки 'xyz'. Значения (строковые литералы) заключаются в одинарные кавычки.

читайте инструкцию здесь.

мой постоянный совет-использовать юридические, строчные имена исключительно, поэтому двойное цитирование не требуется.

цитировать документация:

ключевые слова и некотируемые идентификаторы не учитывают регистр. Таким образом:

UPDATE MY_TABLE SET A = 5;

можно эквивалентно записать как:

uPDaTE my_TabLE SeT a = 5;

цитирование идентификатора делает его чувствительным к регистру, тогда как некотируемые имена всегда складываются в нижний регистр:

UPDATE "my_table" SET "a" = 5;  // equivalent to the above examples

имена столбцов, которые являются смешанным регистром или прописными буквами, должны быть дважды заключены в кавычки в postgres sql. Поэтому лучше всего будет следовать всем маленьким случаям с подчеркиванием.