#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"');
(обратите внимание на внешние одинарные кавычки), и он работал правильно.