web-dev-qa-db-fra.com

PostgreSql INSERT FROM SELECT RETURNING ID

Dans PostgreSql 9.2.4, j'ai deux tables: user (id, login, password, name) et dealer (id, user_id).

Et je veux insérer dans les deux tables en retournant l'id du revendeur créé.

Actuellement, je le fais avec deux requêtes:

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

Mais puis-je implémenter cela avec une seule requête INSERT à l'aide de l'instruction RETURNING?

45
Nailgun

Vous avez juste besoin d'ajouter un RETURNING id à ton INSERT ... SELECT:

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

Démo: http://sqlfiddle.com/#!12/75008/1

69
mu is too short