postgresql序列跳转30或33个数字,缓存等于1

postgresql序列跳转30或33个数字,缓存等于1,postgresql,Postgresql,我使用了postgresql序列,并试图从序列中获取下一个变量。我使用了缓存1,起始值为1。计算机运行时一切都很顺利。但在我异常地关闭机器电源并重新启动它之后,我发现“选择nextval('patient_seq')”跳了30或33。我对那个序列使用了缓存1。 有人知道为什么吗?序列在postgresq中是如何工作的?每次您调用选择下一步(“患者序列”)时,即使您不使用它,您也在分配和递增 我认为您打算使用select currval('patient_seq'),它将为您提供由nextval分

我使用了postgresql序列,并试图从序列中获取下一个变量。我使用了缓存1,起始值为1。计算机运行时一切都很顺利。但在我异常地关闭机器电源并重新启动它之后,我发现“选择nextval('patient_seq')”跳了30或33。我对那个序列使用了缓存1。
有人知道为什么吗?序列在postgresq中是如何工作的?

每次您调用
选择下一步(“患者序列”)
时,即使您不使用它,您也在分配和递增

我认为您打算使用
select currval('patient_seq')
,它将为您提供由
nextval
分配的最后一个值


这将允许您运行一系列插入,然后查看最后插入的值。

谢谢,Phill。我找到了这个问题的根本原因。因为postgres预分配的32比配置的cache_值多,而配置的cache_值是在其源代码中硬编码的。断电时,预分配的号码将丢失,并将重新分配另一个32+缓存值号码。