我有一个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";
但是,如果名称“ foo”的标记已存在,则返回空结果集。
然后,我将查询更改为使用noop DO UPDATE
子句:
INSERT INTO
"tag" ("name")
VALUES( 'foo' )
ON CONFLICT ("name") DO UPDATE SET "name" = 'foo'
RETURNING "id";
这可以按预期工作,但是有些混乱,因为我只是将名称设置为已经存在的值。
这是解决此问题的方法,还是我缺少一种更简单的方法?
@a_horse_with_no_name
—
Der Hochstapler '16
ERROR: missing FROM-clause entry for table "excluded"
使用时才给我DO NOTHING
。
returning excluded.id
吗?