简体   繁体   English

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

[英]Save return values from INSERT…RETURNING into temp table (PostgreSQL)

I have a table table1 with columns id , value1 and value2 . 我有一个表table1 ,列idvalue1value2

Also I have a query 我也有一个问题

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

that returns set of ids. 返回一组id。 I want to store return values (these ids) in some temp table. 我想在一些临时表中存储返回值(这些ID)。 Something like that: 像这样的东西:

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

How can I do it? 我该怎么做?

DBMS is PostgreSQL DBMS是PostgreSQL

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

This requires Postgres 9.2 or later. 这需要Postgres 9.2或更高版本。

Two options. 两种选择。

If you need it just for one follow-up query, a with statement (see the horse's answer) is the easiest. 如果您只需要一个后续查询,那么with语句(请参阅马的答案)是最简单的。

If you need it for more than one follow-up query, the other option is to not use insert ... returning , but rather create table as : 如果您需要多个后续查询,另一个选项是不使用insert ... returning ,而是create table as

CREATE TEMPORARY TABLE foo AS
SELECT value3,value4 FROM table2

Caveats: if necessary, create the indexes you need on the table -- and analyze it if you do. 注意事项:如有必要,可以在表格上创建所需的索引 - 如果需要,可以对其analyze

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM