从PostgreSQL序列中选择多个ID

Mik*_*one 21 postgresql select nextval

是否有简洁的方法在1个查询中多次为PostgreSQL序列选择nextval?这将是唯一返回的值.

例如,我想做一些非常短暂和甜蜜的事情:

SELECT NEXTVAL('mytable_seq', 3) AS id;
Run Code Online (Sandbox Code Playgroud)

得到:

 id  
-----
 118
 119
 120
(3 rows)
Run Code Online (Sandbox Code Playgroud)

小智 46

select nextval('mytable_seq') from generate_series(1,3);
Run Code Online (Sandbox Code Playgroud)

generate_series是一个函数,它返回许多带有顺序号的行,由它的参数配置.

在上面的例子中,我们不关心每一行中的值,我们只使用generate_series作为行生成器.对于每一行,我们都可以调用nextval.在这种情况下,它返回3个数字(下一个).

你可以将它包装成函数,但我不确定它是否真的合理,因为查询有多短.

  • 请注意,3个numbres(nextvals)不保证是连续的. (5认同)

Ant*_*sma 12

有一篇关于这个确切问题的好文章:" 从序列中获取多个值 ".

如果性能不是问题,例如当使用序列值dwarfs时,用于获取它们的时间或n很小,那么SELECT nextval('seq')FROM generate_series(1,n)方法是最简单和最合适的.

但是,在为批量加载准备数据时,从锁定内增加序列n的文章的最后一种方法是合适的.