Параметры для получения текущего (в момент запуска запроса) значения последовательности
Как можно получить текущее значение последовательности в postgresql 8.4?
Примечание. Мне нужно значение для какой-то статистики, просто извлечение и сохранение. Ничто, связанное с concurrency и условиями гонки в случае ручного приращения, не имеет отношения к вопросу.
Примечание 2: последовательность разделяется между несколькими таблицами
Примечание 3: currval
не будет работать из-за:
- Возвращает последнее значение, полученное последним для этой последовательности в текущей сессии
-
ERROR: currval of sequence "<sequence name>" is not yet defined in this session
Моя текущая идея: анализировать DDL, что странно
Ответы
Ответ 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).