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

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

select * from persons where first_Name="xyz";

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

ОШИБКА: столбец "first_Name" не существует

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

Ответ 1

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

Итак, да, имена столбцов PostgreSQL чувствительны к регистру:

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

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

Прочтите руководство здесь.

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

Ответ 2

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

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

UPDATE MY_TABLE SET A = 5;

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

uPDaTE my_TabLE SeT a = 5;

Вы также можете написать его, используя идентификаторы в кавычках:

UPDATE "my_table" SET "a" = 5;

Кавычки идентификатора делают его чувствительным к регистру, тогда как имена без кавычек всегда свертываются в нижний регистр (в отличие от стандарта SQL, где имена без кавычек свертываются в верхний регистр). Например, идентификаторы FOO, foo и "foo" в PostgreSQL считаются одинаковыми, но "Foo" и "FOO" отличаются от этих трех и друг друга.

Если вы хотите писать переносимые приложения, советуем всегда указывать конкретное имя или никогда не указывать его.

Ответ 3

Имена столбцов в смешанном регистре или в верхнем регистре должны быть заключены в двойные кавычки в PostgresQL. Так что лучшим соглашением будет следовать за всем небольшим регистром с подчеркиванием.