如何在postgresql 8.4中获取当前序列值?
注意:我需要某种统计信息的值,只需要检索和存储。在手动递增的情况下,与并发和竞争条件无关的任何内容都与问题无关。
注2:序列在多个表之间共享
注3:currval
因以下原因无效:
ERROR: currval of sequence "<sequence name>" is not yet defined in this session
我目前的想法是:解析DDL,这很奇怪
答案 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列中留下空白)。