PostgreSQL-синтаксис запроса без кавычек
у меня немного глупый вопрос. Я установил сервер БД PostgreSQL, но когда я запускаю запрос, возникает проблема с идентификатором столбца без кавычек. Я не знаю, зачем нужны кавычки вокруг идентификаторов. Мой вопрос:
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 DB не использовать ". Так в 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 ответов
при создании таблиц с использованием двойных кавычек имена столбцов и таблиц становятся чувствительными к регистру. Так что "car_id"
- Это другое имя, чем "CAR_ID"
вам нужно создать таблицы без использования двойных кавычек, то имена не чувствительны к регистру: car_id
это то же самое, что CAR_ID
(кавычки отсутствуют!)
см. руководство для подробности:
http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
Edit:
Оракул!--16-->поведение точно так же. Единственное отличие заключается в том, что Oracle хранит имена в верхнем регистре, а Postgres-в Нижнем. Но поведение при использовании кавычек идентично.
цитирование идентификатора также делает его чувствительным к регистру, тогда как имена без кавычек всегда складываются в нижний регистр. Например, идентификаторы FOO, foo и "foo" считаются одинаковыми PostgreSQL, но "Foo" и "FOO" отличаются от этих трех и друг от друга. (Складывание некотируемых имен в нижний регистр в PostgreSQL несовместимо со стандартом SQL, в котором говорится, что некотируемые имена должны сложите в верхний регистр. Таким образом, foo должно быть эквивалентно "FOO", а не "foo" в соответствии со стандартом. Если вы хотите писать портативные приложения, вам рекомендуется всегда цитировать определенное имя или никогда не цитировать его.)
мне кажется, что таблица vc не имеет столбца с именем car_id
. Вы уверены, что он там? Do \d vel_car
чтобы увидеть структуру таблицы.
котировки являются необязательными, и вы можете пропустить их.