用于检索当前(在运行查询的瞬间)序列值的选项

时间:2013-02-14 23:39:13

标签: postgresql postgresql-8.4

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

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

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

注3:currval因以下原因无效:

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

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

2 个答案:

答案 0 :(得分:74)

您可以使用:

SELECT last_value FROM sequence_name;

<强>更新: 这在CREATE SEQUENCE声明中记录:

  

虽然您无法直接更新序列,但可以使用查询   像:

     

SELECT * FROM name;

     

检查a的参数和当前状态   序列。特别是,序列的 last_value 字段显示   任何会话分配的最后一个值。 (当然,这个值可能会   如果其他会议是积极的,那么在它打印时就会过时   做下一次电话。)

答案 1 :(得分:1)

如果序列用于表中的唯一ID,则可以执行以下操作:

select max(id) from mytable;

最有效的方法,虽然具体是postgres,但是:

select currval('mysequence');

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