Чувствительны к регистру имена столбцов в 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. Поэтому лучше всего будет следить за всем малым случаем с подчеркиванием.