如何在 postgresql 8.4 中获取当前序列值?
注意:我需要某种统计数据的值,只需检索和存储。在手动递增的情况下,与并发和竞争条件无关,与问题无关。
注 2:该序列在多个表中共享
注意3:currval
由于以下原因无法使用:
- 返回当前会话中此序列的 nextval 最近获得的值
ERROR: currval of sequence "<sequence name>" is not yet defined in this session
我目前的想法:是解析DDL,这很奇怪
如何在 postgresql 8.4 中获取当前序列值?
注意:我需要某种统计数据的值,只需检索和存储。在手动递增的情况下,与并发和竞争条件无关,与问题无关。
注 2:该序列在多个表中共享
注意3:currval
由于以下原因无法使用:
ERROR: currval of sequence "<sequence name>" is not yet defined in this session
我目前的想法:是解析DDL,这很奇怪
您可以使用:
SELECT last_value FROM sequence_name;
更新:这记录在CREATE SEQUENCE语句中:
虽然您不能直接更新序列,但您可以使用如下查询:
选择 * FROM 名称;
检查序列的参数和当前状态。特别是,序列的last_value字段显示了任何会话分配的最后一个值。(当然,如果其他会话正在积极进行 nextval 调用,则该值在打印时可能已过时。)
如果该序列用于表中的唯一 ID,您可以简单地执行以下操作:
select max(id) from mytable;
最有效的方法,虽然 postgres 特定,是:
select currval('mysequence');
尽管从技术上讲,这会返回调用生成的最后一个值,调用者nextval('mysequence')
不一定会使用该值(如果未使用,则会在自动增量 id 列中留下空白)。