pgsql自增序列

📅 2026/7/3 5:31:13 👁️ 阅读次数 📝 编程学习
pgsql自增序列

1.从1开始自增。插入数据无需插入id,id即可自增,步长默认是1,也可设置步长。
2.如有业务需求,需要手动指定id,则插入数据后,必须设置下次自增id的开始值,如果不设置,则旧的自增id游标没有更新,那么在插入数据(自增id)时,就会发生主键冲突。
可通过如下语句查找并设置:
(1)查找与表关联的序列名称
SELECT pg_get_serial_sequence('你的表名', '自增列名');
(2)查看当前序列值(最后一次 nextval 返回的值)(常用)【实际值】
-- 将 'sequence_name' 替换为上面查到的结果
SELECT last_value FROM sequence_name;
(3)查找表中目前最大id值【目标值】
SELECT MAX(自增列名) FROM 你的表名;
(4)使用 setval 函数,将序列值设置为当前表中最大 ID 的值
-- 将序列值设置为当前最大 ID
-- 这样下一次调用 nextval() 时,会自动返回 最大值 + 1
SELECT setval('snsj_server_cwfx.finance_audit_data_result_id_seq', (SELECT MAX(id) FROM snsj_server_cwfx.finance_audit_data_result));

关键细节详解
setval 的第二个参数 is_called
setval 函数其实有三个参数:setval(sequence_name, next_value, is_called)。其中 is_called 是一个布尔值,决定了下一次 nextval 的行为:

setval('seq', 100, true) (默认值): 表示序列已经“被调用”过一次,当前值是 100。下一次调用 nextval 将返回 101。 $\rightarrow$ 这就是我们同步最大值时需要的行为。

setval('seq', 100, false): 表示序列虽然被设为 100,但尚未被调用。下一次调用 nextval 将返回 100。