我有一个tag包含 2 列的表:id(uuid) 和name(text)。我现在想在表中插入一个新标签,但如果该标签已经存在,我只想获取id现有记录的 。
我以为我可以ON CONFLICT DO NOTHING结合使用RETURNING "id":
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT DO NOTHING
RETURNING "id";
Run Code Online (Sandbox Code Playgroud)
但是,如果名称为“foo”的标签已经存在,则会返回一个空的结果集。
然后我将查询更改为使用 noopDO UPDATE子句:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
Run Code Online (Sandbox Code Playgroud)
这按预期工作,但有点令人困惑,因为我只是将名称设置为已经存在的值。
这是解决这个问题的方法还是我缺少更简单的方法?