Re: Missing table from in INSERT RETURNING

Поиск
Список
Период
Сортировка
От John McKown
Тема Re: Missing table from in INSERT RETURNING
Дата
Msg-id CAAJSdjid5fWsO07G_P42t_64SLWEq_DOjZVriXrt3A6CVM3BQg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Missing table from in INSERT RETURNING  (John McKown <john.archie.mckown@gmail.com>)
Список pgsql-general
On Tue, Feb 17, 2015 at 2:07 PM, John McKown <john.archie.mckown@gmail.com> wrote:
I haven't seen any one else reply. I don't know if you've gotten a solution. But the following seemed to work for me:

WITH serie AS (
select s, s*10 as computing
from generate_series(1,10) as s 
)
INSERT INTO test_insert_returning (some_value)
SELECT computing
FROM serie
RETURNING gid, some_value;

From my reading on the RETURNING phrase, you can only return values from the table into which you are doing the INSERT. Not any other table or view which might be referenced.

​OOPS, I see what I did wrong. You wanted the "s" value from serie and my example showed the other value from serie. My apologies. Why not insert the "s" value into a third column in "test_insert_​returning"? That is:

CREATE TABLE test_insert_returning(
     gid SERIAL,
     s_temp integer,
     some_value int
);
 
WITH serie AS (
      SELECT s, s*10 as computing
      FROM generate_series(1,10) as s
)
INSERT INTO test_insert_returning(some_value,s)
SELECT computing, s
FROM serie
RETURNING gid, s_temp
;

​You end up getting what is desired, at the cost of a "junk" column in your table.​

 

On Tue, Feb 17, 2015 at 10:18 AM, Rémi Cura <remi.cura@gmail.com> wrote:
Hello dear list,
I would appreciate some help on a small matter that has been bothering me for a long time :


CREATE TABLE test_insert_returning( 
gid SERIAL
,some_value int 
);
WITH serie AS (
select s, s*10 as computing
from generate_series(1,10) as s 
)
INSERT INTO test_insert_returning (some_value)
SELECT computing
FROM serie
RETURNING gid, serie.s

doesn't work.

The only workaround I found was to create a plpgsql function that doesan idnividual insert
so that :
WITH serie AS (
select s, s*10 as computing
from generate_series(1,10) as s 
)
SELECT serie.s, my_inserting_function(computing)
FROM serie ;

But it is very annoying and potentially bad for performance because many insert may be fired.

Any solution?
(postgres 9.3)
Cheers,
Rémi-C




--
He's about as useful as a wax frying pan.

10 to the 12th power microphones = 1 Megaphone

Maranatha! <><
John McKown



--
He's about as useful as a wax frying pan.

10 to the 12th power microphones = 1 Megaphone

Maranatha! <><
John McKown

В списке pgsql-general по дате отправления:

Предыдущее
От: John McKown
Дата:
Сообщение: Re: Missing table from in INSERT RETURNING
Следующее
От: David G Johnston
Дата:
Сообщение: Re: Missing table from in INSERT RETURNING