INSERT INTO main_parse_user ("user_id","group_id", "username", "bio", "first_name")
VALUES ($1,$2,$3,$4,$5)
ON CONFLICT (user_id)
DO UPDATE
SET ("group_id", "username", "bio", "first_name") = (EXCLUDED.group_id, EXCLUDED.username, EXCLUDED.bio,EXCLUDED.first_name)
这是我的代码添加和编辑数据到数据库在同一时间
现在是这样的:
user_id|group_id|@username|bio|first_name
如果数据库先前有一个user_id,那么它编辑并将新请求中的数据添加到剩余字段
但是我需要做一点不同的。
假设数据库中有数据
12345|-10015488|@abcd|None|Dev
我添加了一个与ID完全相同的新行,但更改了bio
12345|-10015488|@abcd|Developer|Dev
当我在旧数据库中没有bio (None
)时,我需要向数据库添加一个新值,如果最初在bio中有信息,则算法简单地跳过
您可以使用coalesce
:
... DO UPDATE
SET (bio, first_name) =
(
coalesce(main_parse_user.bio, EXCLUDED.bio),
EXCLUDED.first_name
)
必须用表名限定原始列值,以消除与新值
的歧义。