Подтвердить что ты не робот

Параметры для получения текущего (в момент запуска запроса) значения последовательности

Как можно получить текущее значение последовательности в postgresql 8.4?

Примечание. Мне нужно значение для какой-то статистики, просто извлечение и сохранение. Ничто, связанное с concurrency и условиями гонки в случае ручного приращения, не имеет отношения к вопросу.

Примечание 2: последовательность разделяется между несколькими таблицами

Примечание 3: currval не будет работать из-за:

  • Возвращает последнее значение, полученное последним для этой последовательности в текущей сессии
  • ERROR: currval of sequence "<sequence name>" is not yet defined in this session

Моя текущая идея: анализировать DDL, что странно

4b9b3361

Ответ 1

Вы можете использовать:

SELECT last_value FROM sequence_name;

Обновление: это описано в инструкции CREATE SEQUENCE:

Хотя вы не можете напрямую обновить последовательность, вы можете использовать запрос как:

SELECT * FROM name;

для изучения параметров и текущего состояния последовательность. В частности, поле last_value последовательности показывает последнее значение, выделенное для любого сеанса. (Конечно, это значение может быть устаревшим к моменту его печати, если активны другие сеансы выполнение последующих вызовов.)

Ответ 2

Если последовательность используется для уникальных идентификаторов в таблице, вы можете просто сделать это:

select max(id) from mytable;

Самый эффективный способ, хотя postgres специфический, заключается в следующем:

select currval('mysequence');

хотя технически это возвращает последнее значение, сгенерированное вызовом nextval('mysequence'), которое может не обязательно использоваться вызывающим абонентом (а если неиспользуемый оставит пробелы в столбце auto increments id).