58

如何在 postgresql 8.4 中获取当前序列值?

注意:我需要某种统计数据的值,只需检索和存储。在手动递增的情况下,与并发和竞争条件无关,与问题无关。

注 2:该序列在多个表中共享

注意3:currval由于以下原因无法使用:

  • 返回当前会话中此序列的 nextval 最近获得的值
  • ERROR: currval of sequence "<sequence name>" is not yet defined in this session

我目前的想法:是解析DDL,这很奇怪

4

2 回答 2

112

您可以使用:

SELECT last_value FROM sequence_name;

更新:这记录在CREATE SEQUENCE语句中:

虽然您不能直接更新序列,但您可以使用如下查询:

选择 * FROM 名称;

检查序列的参数和当前状态。特别是,序列的last_value字段显示了任何会话分配的最后一个值。(当然,如果其他会话正在积极进行 nextval 调用,则该值在打印时可能已过时。)

于 2013-02-15T00:11:25.363 回答
3

如果该序列用于表中的唯一 ID,您可以简单地执行以下操作:

select max(id) from mytable;

最有效的方法,虽然 postgres 特定,是:

select currval('mysequence');

尽管从技术上讲,这会返回调用生成的最后一个值,调用者nextval('mysequence')不一定会使用该值(如果未使用,则会在自动增量 id 列中留下空白)。

于 2013-02-14T23:42:49.813 回答