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

PostgreSQL中插入数据时基于会话生成起始为1的自增序列

PostgreSQL 实现会话级插入序列

需求:通过SELECT查询向另一张表插入数据时,每个会话的序列从1开始、步长1递增;新会话启动后序列重置为1。

方法一:会话级临时序列(推荐)

临时序列是PostgreSQL会话专属对象,会话结束后自动销毁,完美匹配需求:

  1. 在当前会话中创建临时序列:
CREATE TEMP SEQUENCE session_seq START 1 INCREMENT 1;
  1. 执行插入操作,调用nextval()获取序列值:
INSERT INTO target_table (session_seq, col1, col2)
SELECT nextval('session_seq'), s.col1, s.col2
FROM source_table s
ORDER BY s.id; -- 根据业务需求指定排序,保证序列顺序
  • 同一会话内多次插入时,序列会自动连续递增;新会话只需重新执行CREATE TEMP SEQUENCE语句,序列即从1开始。

方法二:会话变量结合自定义递增

适合简单单次插入场景,需手动维护会话变量:

  1. 初始化会话级变量:
SET myapp.session_seq = 0;
  1. 插入时通过变量自增生成序列:
INSERT INTO target_table (session_seq, col1, col2)
SELECT (SELECT myapp.session_seq := myapp.session_seq + 1), s.col1, s.col2
FROM source_table s
ORDER BY s.id;
  • 若同一会话需多次插入,需确保变量持续生效,此方式线程安全性弱于临时序列。

示例效果

序列示例图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:45:19