2014-01-21 19 views
0

我使用postgresql。我使用psql.i運行命令\ d + user我得到用戶表的模式。 但是當我從用戶。它的運行命令SELECT名字給我的錯誤列不存在於表中,其顯示模式中的列

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

嘗試「select public_name from public.user」 – BWS

+0

其工作。謝謝:) –

+0

很酷。那很簡單! ...請接受答案。 – BWS

回答

0

嘗試 「從public.user SELECT名字」

+0

......這個原理起作用,而另一個沒有,是...?這是圍繞真正問題的一種迂迴的方式,會讓海報稍後出現更多問題。 –

+0

謝謝你的深入理由。它確實闡明瞭它。 – BWS

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"; 

但實際上,它會更好,只是命名錶的東西,不衝突與一個關鍵字。