PostgreSQL - синтаксис запроса без кавычек - PullRequest
7 голосов
/ 10 июня 2011

У меня маленький глупый вопрос. Я установил PostgreSQL DB Server, но когда я запускаю запрос, возникает проблема с идентификатором столбца без кавычек. Я не знаю, зачем нужны кавычки вокруг идентификаторов. Мой запрос:

SELECT vc."CAR_ID"
  FROM "VEL_CAR" vc, "VEL_DRIVER" vd, "VEL_DRIVER_CAR" vdc
WHERE vc."CAR_ID" = vdc."CAR_ID" and
      vdc."DRIVER_ID" = vd."DRIVER_ID";

Моя практика с БД Oracle не использовать ". Так в Oracle:

SELECT vc.CAR_ID
  FROM VEL_CAR vc, VEL_DRIVER vd, VEL_DRIVER_CAR vdc
WHERE vc.CAR_ID = vdc.CAR_ID and
      vdc.DRIVER_ID = vd.DRIVER_ID;

Когда я запускаю этот запрос без кавычек в PostgreSQL, он выдает ошибку о синтаксисе:

ERROR:  column vc.car_id does not exist
LINE 1: SELECT vc.CAR_ID

Знаешь почему?

- решаемая - Спасибо, теперь я решил проблему! Это было о создании таблицы. Я создал объекты таблицы, используя pgAdminIII, и написал имя таблицы и имена столбцов в верхнем регистре. pgAdminIII создал запрос с квотами - потому что имена были в верхнем регистре. Таким образом, запрос должен был быть написан с квотами.

Ответы [ 3 ]

12 голосов
/ 10 июня 2011

Когда вы создаете таблицы с использованием двойных кавычек, имена столбцов и таблиц становятся чувствительными к регистру.Таким образом, "car_id" - это имя, отличное от "CAR_ID"

. Вам нужно создавать таблицы без использования двойных кавычек, тогда имена не чувствительны к регистру: car_id соответствует CAR_IDпропущенные кавычки!)

Подробнее см. в руководстве:

http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

Редактировать:Oracle ведет себя точно так же.Единственное отличие состоит в том, что Oracle хранит имена в верхнем регистре, а Postgres хранит их в нижнем регистре.Но поведение при использовании кавычек идентично.

1 голос
/ 10 июня 2011

С Документация Postgres :

При цитировании идентификатора также учитывается регистр, тогда как имена без кавычек всегда складываются в нижний регистр.Например, идентификаторы FOO, foo и "foo" в PostgreSQL считаются одинаковыми, но "Foo" и "FOO" отличаются друг от друга.(Свертывание имен без кавычек в нижний регистр в PostgreSQL несовместимо со стандартом SQL, который говорит, что имена без кавычек должны быть согнуты в верхний регистр. Таким образом, foo должен быть эквивалентен «FOO», а не «foo» в соответствии со стандартом. ЕслиВы хотите писать переносимые приложения. Рекомендуется всегда указывать конкретное имя или никогда его не указывать.)

0 голосов
/ 10 июня 2011

Мне кажется, что в таблице vc нет столбца с именем car_id.Вы уверены, что это там?Сделайте \d vel_car, чтобы увидеть структуру таблицы.

Кавычки не являются обязательными, и вы обычно можете их пропустить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...