You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 13中同一查询内两次nextval调用是否具有确定性?

PostgreSQL序列调用的原子性问题

场景说明

在PostgreSQL 13环境下,现有:

  • 名为example_sequence的序列
  • 仅包含两个bigint字段val1和val2的example_table表

执行插入语句:

insert into example_table (val1, val2) values (nextval('example_sequence'::regclass), nextval('example_sequence'::regclass));

问题解答

  1. 新增行的val2始终保证等于val1 + 1
  2. 不会出现其他会话的nextval调用插入到这两次调用之间的情况,val2绝不会大于val1 + 1

原因在于:

  • PostgreSQL中,同一条SQL语句内的多个nextval调用是连续且原子执行的,序列值的获取过程不会被其他会话打断。序列的nextval操作本身是线程安全的,同一条语句里的多次调用会按顺序拿到连续的序列值,外部会话的序列调用无法插入到这两次调用之间。

内容的提问来源于stack exchange,提问作者user2943799

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:53:08