将返回值从INSERT ... RETURNING保存到临时表(PostgreSQL)

时间:2014-12-11 11:25:41

标签: sql postgresql

我的表格table1包含idvalue1value2列。

我也有查询

INSERT INTO table1(value1,value2) SELECT value3,value4 FROM table2 RETURNING id

返回一组id。 我想在一些临时表中存储返回值(这些ID)。这样的事情:

INSERT INTO TEMP temp1 INSERT INTO table1(value1,value2) SELECT value3,value4 FROM table2 RETURNING id

我该怎么做?

DBMS是PostgreSQL

2 个答案:

答案 0 :(得分:8)

with inserted as (
  INSERT INTO table1 (value1,value2) 
  SELECT value3,value4 
  FROM table2 
  RETURNING id
) 
insert into temp
select id 
from inserted;

这需要Postgres 9.2或更高版本。

答案 1 :(得分:2)

两个选项。

如果您只需要一个后续查询,那么with语句(请参阅马的回答)是最简单的。

如果您需要多个后续查询,则另一个选项是不使用insert ... returning,而是使用create table as

CREATE TEMPORARY TABLE foo AS
SELECT value3,value4 FROM table2

警告:如有必要,可以在桌面上创建所需的索引 - 如果你这样做,则analyze