Функция currval в PostgreSQL жалуется на то, что «столбец не существует»

#postgresql

#postgresql

Вопрос:

Я пытаюсь использовать currval функцию PostgreSQL для возврата последнего вставленного идентификатора строки вызываемой таблицы Concept . Concept вызывается последовательный первичный ключ cid и вызывается автоматически сгенерированная последовательность Concept_cid_seq .

Я пытаюсь выполнить следующее утверждение и получаю сообщение об ошибке:

 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. В документации используются одинарные кавычки '' вместо "" . вы все еще видите ту же ошибку с обоими стилями кавычек?

2. в нем также упоминается, что регистр последовательности нормализуется до нижнего регистра, если он не содержит двойных кавычек, поэтому вы, вероятно, должны иметь currval('"Concept_cid_seq"')

3. @TokenMacGuy Да, я пробовал оба способа. Если я использую одинарные кавычки, это не сохраняет заглавную букву, поэтому ERROR: relation "concept_cid_seq" does not exist вместо этого появляется ошибка. Интересно, имеет ли какое-то значение тот факт, что в этом случае он называет его отношением, а не столбцом…

4. @TokenMacGuy В ответ на ваш второй комментарий, вот и все. Не стесняйтесь добавлять ответ, и я могу пометить его, или я сделаю это, если вы не хотите повторения!

Ответ №1:

Оказывается, это была проблема с капитализацией и кавычками. Поскольку я хотел сохранить заглавную букву имени отношения, мне нужно было использовать как одинарные, так и двойные кавычки, чтобы передать правильное имя отношения currval .

Я изменил запрос на SELECT currval('"Concept_cid_seq"'); (обратите внимание на внешние одинарные кавычки), и он работал правильно.