2014-01-21 2 views
0

Я использую postgresql .i am using psql.i запустить команду \ d + пользователь i получить схему таблицы пользователя. , но когда я запускаю команду выберите first_name от пользователя .its дает мне ошибкустолбец не существует в таблице whiel его показывает столбец в схеме

ritesh=# select first_name from user; 
ERROR: column "first_name" does not exist 
LINE 1: select first_name from user; 
      ^

, как вы можете видеть на скриншоте .Как решить его и где я спутать, пожалуйста, объясните. enter image description here

+2

попробуйте «выберите first_name из public.user» – BWS

+0

его работа. спасибо :) –

+0

круто. это было легко! ... примите во внимание. – BWS

ответ

0

попробовать "выберите first_name из public.user"

+0

... и причина, по которой это работает, а другая нет, есть ...? Это хакерский подход к реальной проблеме, которая приведет к дальнейшим проблемам с плакатом позже. –

+0

Спасибо за ваши глубинные причины. Он это разъясняет. – BWS

2

Эта проблема возникает из-за "user" is a keyword. Вы не должны использовать его для имен таблиц и т. Д. В противном случае вы получите удовольствие от этого.

See, user является магическим псевдо-функция, которая возвращает текущее имя - это псевдоним для current_user:

regress=> SELECT user; 
current_user 
-------------- 
testuser 
(1 row) 

Так что вы пытаетесь сделать, это вызвать функцию user в возвращающих набор контекст и получить из него столбец first_name. Результат функции не имеет такого столбца, следовательно, ошибка.

Не ограничивайте себя только схемой - укажите таблицу как public.user, чтобы обойти это. Как минимум вы должны использовать идентификаторы в кавычках, если вы собираетесь использовать ключевые слова SQL для имен таблиц, например:

select first_name from "user"; 

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

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