您好我使用INSERT
和ON 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
但如果用户不存在,我是否可以创建与users
相关联的profiles
表格?
我的意思是如果我没有冲突,将是
INSERT INTO profiles(user_id, url)
VALUES(user_id, 'google.com')
和user_id
将来自创建的用户<{p}}
我不知道是否有可能。谢谢。
答案 0 :(得分:0)
我通过Postgres WITH
以https://www.postgresql.org/docs/9.6/static/queries-with.html方式解决了这个问题:
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