检索当前(在运行查询时)序列值的选项

怎样才能得到 postgreql 8.4中的当前序列值?

注意: 我需要一些统计数据的值,只需要检索和存储。在手动递增的情况下,与并发和竞态条件无关的任何内容都与问题无关。

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

注3: currval不能工作是因为:

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

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

76706 次浏览

如果序列用于表中的唯一 id,您可以简单地这样做:

select max(id) from mytable;

最有效的方法是:

select currval('mysequence');

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

你可使用:

SELECT last_value FROM sequence_name;

更新 : 创建序列声明中记录了这一点:

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

从名称中选择 * ;

参数和当前状态 特别是,序列的 Last _ value字段显示 任何会话分配的最后一个值。(当然,这个值可能 如果其他会议正在积极进行,那么在打印出来的时候就已经过时了 做下一步调用。)

在某个时间点,一个秘密函数(即 非法移民... 还是)正是这样做的:

SELECT pg_sequence_last_value('schema.your_sequence_name');