对同一个序列的nextval()的两个调用在一个查询中是确定的吗?



与Postgres(13),鉴于我有:

  1. 一个叫做example_sequence
  2. 的序列
  3. 一个名为example_table的表,只有两个bigint字段,称为val1val2

现在,向表中添加一行,如下所示:

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')

一般来说,你不应该依赖于序列生成的值是无间隙的。你唯一可以信赖的是它们是递增的并且是唯一的。