2017-05-23 16 views
0

こんにちは私はINSERTON CONFLICTを使ってデータを作成または更新します。アソシエーションを使用したバルクオブジェクトの作成または更新

例:

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 

しかし、私は、ユーザーが存在していなかった場合などprofilesテーブル用usersに関連するも作成することができますか?私が意味する

私が競合していない場合は、

INSERT INTO profiles(user_id, url) VALUES(user_id, 'google.com')user_idになります作成したユーザー

からidになります私は知らないことが可能です。ありがとう。

+1

はなぜちょうどCTEとの両方の挿入をしません..? –

答えて

0

私は次のようにhttps://www.postgresql.org/docs/9.6/static/queries-with.htmlからのPostgres WITHを通してそれを解決:

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 
関連する問題