2017-05-23 1 views
0

Hallo, ich verwende INSERT mit ON CONFLICT zum Erstellen oder Aktualisieren von Daten.Erstellen oder Aktualisieren von Massenobjekten mit Zuordnung

Beispiel:

INSERT INTO users(office_id, f_name, l_name) 
VALUES 
    (1, 'user1_f', 'u1_last'), 
    (2, 'user2_f', 'u2_last'), 
    (2, 'user3_f', 'u2_last') 
ON CONFLICT(office_id, l_name) 
DO UPDATE SET 
    f_name=EXCLUDED.f_name 

Aber mache ich auch users zum Beispiel profiles Tabelle zugeordnet, wenn der Benutzer nicht war existieren?

Ich meine, wenn ich nicht Konflikt

sein

INSERT INTO profiles(user_id, url) VALUES(user_id, 'google.com') und user_idid von erstellt Benutzer sein

Ich weiß nicht, ist es möglich. Vielen Dank.

+1

warum nicht nur mit CTE beide Einsätze tun .. –

Antwort

0

Ich löste es durch Postgres WITH von https://www.postgresql.org/docs/9.6/static/queries-with.html in der nächsten Weise:

WITH new_users AS (
    INSERT INTO users(office_id, f_name, l_name) 
    VALUES 
    (1, 'user1_f', 'u1_last'), 
    (2, 'user2_f', 'u2_last'), 
    (2, 'user3_f', 'u2_last') 
    ON CONFLICT(office_id, l_name) 
    DO UPDATE SET 
    f_name=EXCLUDED.f_name 
    RETURNING * 
), new_user_profile AS (
    INSERT INTO profiles(user_id, created_at, updated_at) 
    SELECT id, current_timestamp, current_timestamp FROM new_users 
    ON CONFLICT (user_id) DO NOTHING 
    RETURNING * 
) 
SELECT * FROM new_users 
Verwandte Themen