gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:48:55 26 4
gpt4 key购买 nike

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

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

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()而不是 alter sequence...,例如

select setval('my_sequence', 110)

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

关于postgresql - 如何在不推进序列的情况下找到 nextval 产生的下一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58474342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com