我有一个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吗?