同一查询中的PostgreSQL nextval和currval

同一查询中的PostgreSQL nextval和currval,postgresql,Postgresql,我希望调用NEXTVAL一次,并多次使用返回的值。但是它不起作用 假设序列seq_name现在为10(查询是独立执行的,而不是按列出的顺序执行): 上面将给出11,12(我想要11和11) 以上将给出11、10或错误,该错误在当前会话中从未调用过NEXTVAL。[我知道错误发生的原因:)] 是否有方法在同一SQL语句中使用NEXTVAL和CURRVAL,以获得相同的增量值(本例中为11)以供重用?还是这个问题的简单解决方案?可能的解决方案 SELECT nextval nextval1, nex

我希望调用
NEXTVAL
一次,并多次使用返回的值。但是它不起作用

假设序列
seq_name
现在为10(查询是独立执行的,而不是按列出的顺序执行):

上面将给出11,12(我想要11和11)

以上将给出11、10错误,该错误在当前会话中从未调用过
NEXTVAL
。[我知道错误发生的原因:)]

是否有方法在同一SQL语句中使用
NEXTVAL
CURRVAL
,以获得相同的增量值(本例中为11)以供重用?还是这个问题的简单解决方案?

可能的解决方案

SELECT nextval nextval1, nextval nextval2
  FROM
(
  SELECT NEXTVAL('seq_name') nextval
) q
这里是演示

更新以插入而不是
插入到。。。值
使用
插入到。。。选择

INSERT INTO Table1 (col1, col2, col3, col4, ...) 
SELECT nextval, nextval, 5, 'Text value', ...
  FROM
(
  SELECT NEXTVAL('seq_name') nextval
) q

一个
INSERT()值()
构造怎么样?对于这样的insert语句,我需要它,因此更一般的解决方案是合适的。您的解决方案太具体,无法选择语句。谢谢,回答得很好,但如果我真的必须坚持insert VALUES构造,该怎么办数据在任何情况下(至少我不知道)都不能将
插入值
替换为
插入选择
:)否则将其包装到过程中并使用变量。你是对的,我同意。但这是一个挑战,对吗?:)顺便说一句,不要在SQLFiddle中尝试。。出于某种原因,同一insert语句中的NEXTVAL和CURRVAL返回相同的值(在我使用的DB中不是这样工作的…可能是不同的版本?IDK…)。
SELECT nextval nextval1, nextval nextval2
  FROM
(
  SELECT NEXTVAL('seq_name') nextval
) q
INSERT INTO Table1 (col1, col2, col3, col4, ...) 
SELECT nextval, nextval, 5, 'Text value', ...
  FROM
(
  SELECT NEXTVAL('seq_name') nextval
) q