2011-11-02 19 views
6

PostgreSQLのcurrval関数を使用して、最後に挿入されたテーブルの行IDをConceptとすることを試みています。 Conceptにはcidというシリアルプライマリキーがあり、自動的に生成されるConcept_cid_seqというシーケンスがあります。currval "カラムが存在しない"と告げる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"; 

を私は(私が期待するよう)を示す1行のテーブルを取得します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"');(外側の一重引用符に注意)に変更し、正しく機能しました。