it-swarm.com.de

PostgreSql INSERT FROM SELECT RETURNING ID

In PostgreSql 9.2.4 habe ich zwei Tabellen: user (id, login, password, name) und dealer (id, user_id).

Und ich möchte in beide Tabellen die ID des erstellten Händlers zurückgeben.

Derzeit mache ich es mit zwei Abfragen:

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');

Aber kann ich dies mit einer einzelnen INSERT Abfrage unter Verwendung der RETURNING Anweisung implementieren?

45
Nailgun

Sie müssen nur ein RETURNING id zu deinem INSERT ... SELECT:

WITH rows AS (...)
INSERT INTO dealer (user_id)
    SELECT id
    FROM rows
    RETURNING id;

Demo: http://sqlfiddle.com/#!12/75008/1

69
mu is too short