我有一个带有维护菜单的应用程序(当然,仅在极少数情况下使用)。在此菜单中,我还将显示下一个将要生成的特定序列的下一个数字,并为用户提供重置序列的选项。
我使用以下查询显示下一个数字:
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
将产生的下一个数字,我该怎么办?
我有一个带有维护菜单的应用程序(当然,仅在极少数情况下使用)。在此菜单中,我还将显示下一个将由特定序列生成的下一个数字,并给出...
例如,使用setval()
代替setval()
>>
alter sequence...
写入磁盘的最后一个序列值(
select setval('my_sequence', 110)
的last_value
)只能由非事务功能pg_sequences
和nextval()
设置。用setval()
重新启动序列后,最后一个值将不被保存,直到它被alter sequence ...
实际使用或由nextval()
设置为止。这是因为setval()
可能会回滚。