我在以下方面遇到了问题(在PostgreSQL中(。
目的:
- 从临时表读取数据
tmp
- 将此处理到另一个表
y
- 使用表中的
nextval
y
与tmp
中的数据结合使用。
我以为这可以完成这项工作:
INSERT INTO y (v1, v2) VALUES (nextval(y.v1), SELECT v2 FROM tmp)
还尝试过:
INSERT INTO y (v1, v2) VALUES (SELECT nextval(y.v1), v2 FROM tmp)
谁能解释一下如何做到这一点?
您显示的代码中有两个误解/错误:
-
nextval()
需要序列的名称,而不是列名称。 - 如果使用
select
语句为insert
语句提供数据,则不能使用values()
我想你想要的东西是:
insert into y (v1, v2)
select nextval(...), v2
from tmp;
我不清楚你所说的">使用表 y 中的下一个值"是什么意思。如前所述,nextval(( 对序列进行操作,而不是对表或列进行操作。如果您的意思是">从与 y.v1 关联的序列中获取 nextval",并且y.v1
定义为serial
列,您可以执行以下操作:
insert into y (v1, v2)
select nextval(pg_get_serial_sequence('y','v1')), v2
from tmp;
但这需要将v1
定义为serial