一、序列的创建
CREATE SEQUENCE seq_bm_menuid
INCREMENT 1
MINVALUE 1
MAXVALUE 999999999999999999
START 1
CACHE 5;
大家从以上语句中可以看出当前序列的cache为5,那么这个cache是在什么时候起作用呢?
二、遇到的序列跳值问题
当我们的web应用访问postgresql数据库,使用nextval('seq_bm_menuid')获取序列值,然后插入到我们的业务表中时,发现业务表中该序列值对应字段的值不连续,以5为间隔发生跳跃,如图所示:。
三、做个小实验
为了弄清楚序列跳值的原因,做个小实验,方法如下:在pgAdmin中新建两个查询窗口,分别执行select nextval('seq_bm_menuid');语句,当在第一个查询窗口执行语句时,返回序列值为147;当在第二个查询窗口执行语句时,返回序列值为152;果然还是间隔为5的产生序列值啊,继续往下做就知道是怎么回事了。
我们回到第一个查询窗口,再次执行语句,此时返回序列值为148;再到第二个查询窗口,再次执行语句,此时返回序列值为153;到这里终于搞明白了序列的cache是作用于会话的,我们新建两个查询窗口实际是两个会话,postgresql数据库为每个会话cache了5个序列值,到此终于弄清楚了序列跳值的原因了。