Являются ли имена столбцов 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. Так что лучшим соглашением будет следовать за всем небольшим регистром с подчеркиванием.