2011-11-02 118 views
6

我想使用PostgreSQL的currval函數返回表名爲Concept的最後插入行id。 Concept有一個稱爲cid的串行主鍵,並且有一個自動生成的序列,稱爲Concept_cid_seqcurrval PostgreSQL中的函數抱怨「列不存在」

我嘗試下面的語句,並得到一個錯誤:

SELECT currval("Concept_cid_seq"); 
ERROR: column "Concept_cid_seq" does not exist 
LINE 1: SELECT currval("Concept_cid_seq"); 
        ^

********** Error ********** 

ERROR: column "Concept_cid_seq" does not exist 
SQL state: 42703 
Character: 16 

但是當我運行查詢:

SELECT * from "Concept_cid_seq"; 

我得到一個表一行(如我期望的),顯示像last_value,start_value等列...

我在這裏錯過了什麼?我是否將錯誤的信息傳遞給currval?爲什麼說'專欄不存在?'

+1

該文檔使用單引號,''''代替'「」'。你是否仍然看到兩種報價風格都有相同的錯誤? – SingleNegationElimination

+3

它還提到,該序列的情況是規範化爲小寫,除非它包含雙引號,所以你應該有'currval('「Concept_cid_seq」')'...... – SingleNegationElimination

+1

@TokenMacGuy是的,我已經試過了兩種方式。如果我使用單引號,它不會保留大小寫,所以錯誤會變成'ERROR:relation'concept_cid_seq「不存在」。我想知道是否有一些重要的事實,它稱之爲關係,而不是在這種情況下的列... – Drewmate

回答

5

事實證明,這是大寫和引號的問題。因爲我想保留關係名稱的大小寫,所以我需要使用兩個單個的雙引號,以便將正確的關係名稱傳遞給currval

我將查詢改爲SELECT currval('"Concept_cid_seq"');(注意外面的單引號)並且它正常工作。