Reputation: 4179
In PostgreSql 9.2.4 I have two tables: user (id, login, password, name)
and dealer (id, user_id)
.
And I want to insert into both tables returning id of created dealer.
Currently I'm doing it with two queries:
WITH rows AS (
INSERT INTO "user"
(login, password, name)
VALUES
('dealer1', 'jygbjybk', 'Dealer 1')
RETURNING id
)
INSERT INTO dealer (user_id)
SELECT id
FROM rows;
SELECT currval('dealer_id_seq');
But can I implement this with a single INSERT
query using RETURNING
statement?
Upvotes: 111
Views: 184472
Reputation: 349
For my purposes, I needed it in a variable so I did this:
INSERT INTO dealer (user_id)
SELECT id
FROM rows
RETURNING id INTO l_dealerid;
Upvotes: 24
Reputation: 434915
You just need to add a RETURNING id
to your INSERT ... SELECT
:
WITH rows AS (...)
INSERT INTO dealer (user_id)
SELECT id
FROM rows
RETURNING id;
Demo: http://sqlfiddle.com/#!12/75008/1
Upvotes: 153