使用Postgres(13),因为我有:
1.一个叫做example_sequence
的序列
1.名为example_table
的表,只有两个bigint
字段,分别为val1
和val2
现在,我向表中添加一行,如下所示:
insert into example_table (val1, val2)
values (
nextval('example_sequence'::regclass),
nextval('example_sequence'::regclass)
);
问题:对于这一新行,val2
是否始终保证为val1 + 1
?
或者,是否有可能在上述两个调用之间发生对该序列的nextval
的其他调用(例如,在另一个会话中),因此递增该序列,以使val2
大于val1 + 1
?
1条答案
按热度按时间ujv3wf0j1#
对于这一新行,val2是否始终保证为val1 + 1?
不,不是的。
可能有一个并发事务也调用了
nextval('example_sequence')
,正好在您语句的两个调用之间。一般来说,你永远不应该依赖序列生成的值是无间隙的,你唯一可以依赖的是它们是递增的和唯一的。