与Postgres(13),鉴于我有:
- 一个叫做
example_sequence
的序列 - 一个名为
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
?
对于这个新行,val2总是保证为val1 + 1吗?
不,它不是。
可能有一个并发事务也正好在之间调用nextval('example_sequence')
。
一般来说,你不应该依赖于序列生成的值是无间隙的。你唯一可以信赖的是它们是递增的并且是唯一的。