如何在不推进序列的情况下找到nextval产生的下一个值?

问题描述 投票:1回答:1

我有一个带有维护菜单的应用程序(当然,仅在极少数情况下使用)。在此菜单中,我还将显示下一个将要生成的特定序列的下一个数字,并为用户提供重置序列的选项。

我使用以下查询显示下一个数字:

select case when last_value is not null then last_value+increment_by else start_value end
from pg_sequences
where sequencename = 'my_sequence'

并且如果用户更改了我运行的顺序:

alter sequence my_sequence restart with $NEW_NUMBER

通常在使用上述查询重置序列之后,以及从序列中提取任何新数字之前,这种方法通常可以正常工作。我的查询来找出下一个数字将显示“ 1”,这不一定正确。

如果不实际调用nextval(不实际更改顺序),要如何确定nextval将产生的下一个数字,我该怎么办?

我有一个带有维护菜单的应用程序(当然,仅在极少数情况下使用)。在此菜单中,我还将显示下一个将由特定序列生成的下一个数字,并给出...

postgresql
1个回答
1
投票

例如,使用setval()代替setval() >>

alter sequence...

写入磁盘的最后一个序列值(select setval('my_sequence', 110) last_value)只能由非事务功能pg_sequencesnextval()设置。用setval()重新启动序列后,最后一个值将不被保存,直到它被alter sequence ...实际使用或由nextval()设置为止。这是因为setval()可能会回滚。

© www.soinside.com 2019 - 2024. All rights reserved.