2014-01-02 4 views
78

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

select * from persons where first_Name="xyz"; 

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

ERROR: column "first_Name" does not exist

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

ответ

136

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

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

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

Read the manual here.

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

+15

Да, используя двойные кавычки - способ обслуживания ада. –

+0

@Erwin Неверные имена таблиц верхнего регистра в соответствии со стандартом SQL или это что-то специфическое для PostGresSQL? – ArtB

+3

@ArtB: стандарт SQL определяет идентификаторы без учета регистра, как и Postgres. Единственное отклонение: идентификаторы без кавычек складываются в верхний регистр в стандарте, но pg в нижнем регистре все, что не является двойным. (Только в редких случаях). [Подробнее см. Здесь.] (Http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS) –

8

цитировать documentation:

Key words and unquoted identifiers are case insensitive. Therefore:

UPDATE MY_TABLE SET A = 5; 

can equivalently be written as:

uPDaTE my_TabLE SeT a = 5; 

Цитирования идентификатора делает его регистр, в то время как неупомянуты имена всегда сложены в нижний регистр:

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

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

+1

Это неверно, так как объяснение @ erwin-brandstetter –

+0

Как это сделать? Если у вас есть имена столбцов, которые являются смешанным регистром или верхним регистром, чтобы обратиться к ним, вам нужно поместить идентификатор в двойные кавычки. – theferrit32

Смежные вопросы