Чувствительны к регистру имена столбцов в PostgreSQL?
у меня есть таблица db, скажем,persons
в Postgres, переданном другой командой, у которой есть имя столбца, скажем,"first_Name"
. Теперь я пытаюсь использовать PG commander для запроса этой таблицы на это имя столбца.
select * from persons where first_Name="xyz";
и он просто возвращает
ошибка: столбец "first_Name" не существует
не уверен, что я делаю что-то глупое или есть обходной путь к этой проблеме, которую мне не хватает?
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. Поэтому лучше всего будет следить за всем малым случаем с подчеркиванием.