使用nextval从临时表中插入表中的新数据

时间:2016-04-13 11:57:29

标签: sql postgresql sql-insert nextval

我遇到以下问题(在PostgreSQL中)。

目的:

  • 从临时表tmp
  • 中读取数据
  • 将此处理到另一个表y
  • 使用表nextval中的ytmp中的数据。

我认为这可以胜任:

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)

任何人都可以解释如何做到这一点吗?

1 个答案:

答案 0 :(得分:0)

您所显示的代码中存在两个误解/错误:

  1. nextval()需要序列的名称,而不是列名。
  2. 如果使用select语句提供insert语句的数据,则无法使用values()
  3. 你想要的东西是:

    insert into y (v1, v2) 
    select nextval(...), v2 
    from tmp;
    

    我不清楚“使用表y 中的nextval”是什么意思。如前所述,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