postgresql 在一个查询中,对同一个序列的两次nextval()调用是否具有确定性?

xxhby3vn  于 2023-04-11  发布在  PostgreSQL
关注(0)|答案(1)|浏览(173)

使用Postgres(13),因为我有:
1.一个叫做example_sequence的序列
1.名为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

ujv3wf0j

ujv3wf0j1#

对于这一新行,val2是否始终保证为val1 + 1?
不,不是的。
可能有一个并发事务也调用了nextval('example_sequence'),正好在您语句的两个调用之间。
一般来说,你永远不应该依赖序列生成的值是无间隙的,你唯一可以依赖的是它们是递增的和唯一的。

相关问题