当列显示模式中的列时,列确实存在于表中

时间:2014-01-21 14:29:10

标签: sql database postgresql

我正在使用postgresql。我正在使用psql.i运行命令\ d + user我得到用户表的架构。 但是当我运行命令时,从用户选择first_name。给我错误

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 个答案:

答案 0 :(得分:2)

发生此问题是因为"user" is a keyword。你不应该将它用于表名等。否则你会得到这样的乐趣。

请参阅,user是一个魔术伪函数,它返回当前用户名 - 它是current_user的别名:

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

所以你要做的是在一个返回集合的上下文中调用函数user,并从中获取列first_name。函数结果没有这样的列,因此出错。

不要只是将您的表格架构限定为public.user来解决此问题。如果您要对表名使用SQL关键字,至少应该使用带引号的标识符,例如:

select first_name from "user";

但实际上,将表格命名为与关键字不冲突的内容会好得多。

答案 1 :(得分:0)

尝试“从public.user中选择first_name”